庫和表
庫是用來存表的。一個數據庫管理系統中可能包含若干個數據庫。一個庫中可以存放多個表,表類似於一個表格,有規律和格式的存儲數據。
mysql安裝好后系統自帶的庫有
information_schema:是一個信息數據庫,它保存着關於MySQL服務器所維護的所有其他數據庫的信息。(如數據庫名,數據庫的表,表欄的數據類型與訪問權 限等。)
mysql:mysql的核心數據庫,主要負責存儲數據庫的用戶、權限設置、關鍵字等mysql自己需要使用的控制和管理信息。(常用的,在mysql.user表中修改root用戶的密碼)。
performance_schema:主要用於收集數據庫服務器性能參數。
sys:Sys庫所有的數據源來自:performance_schema。目標是把performance_schema的把復雜度降低,讓DBA能更好的閱讀這個庫里的內容。讓DBA更快的了解DB的運行情況。
操作庫的命令
查詢庫
show databases;
新增庫
create database <數據庫名>;
刪除庫
drop database <數據庫名>;
使用庫
use <數據庫名>;
操作表命令
查詢庫中的表
show tables;
創建表
CREATE TABLE student ( stu_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, stu_name varchar(20) NOT NULL COMMENT '學生姓名', stu_age int(3) NOT NULL DEFAULT NULL COMMENT '學生年齡', stu_weight decimal(5,2) DEFAULT '0.00' COMMENT '體重', create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='學生信息表';
相關字段描述
NOT NULL | 字段不能為空 |
AUTO_INCREMENT | 自動增長 |
PRIMARY KEY | 主鍵,唯一用來標識數據行的,它是不能為空的,最好每個表都要設置一個主鍵 |
COMMENT | 字段描述 |
DEFAULT | 默認值 |
CURRENT_TIMESTAMP | 當前時間戳 |
ENGINE=InnoDB | 數據庫儲存引擎 |
UNIQUE | 數據內容不能重復 |
UNSIGNED | 無符號,主要是用在數值字段上修飾,不能為負數 |
查看表結構信息
desc <表名>;
查看表創建
show create table <表名>;
刪除表
drop table <表名>;
表重命名
RENAME TABLE 原名 TO 新名; ALTER TABLE 原名 RENAME 新名; ALTER TABLE 原名 RENAME TO 新名;
修改表字段
#添加一列ALTER TABLE 表名字 ADD 列名字 數據類型 約束;
#刪除一列 ALTER TABLE 表名字 DROP 列名字;
#修改一列 ALTER TABLE 表名字 CHANGE 原列名 新列名 數據類型 約束;
#改變數據類型 ALTER TABLE 表名字 MODIFY 列名字 新數據類型;
操作數據命令
添加數據
#根據列插入數據
insert into student (stu_name, stu_age) values (’李貴’,20);
#根據表字段插入輸入 insert into student values (1,’李貴’,20,60.70,’2019-05-16 00:26:16’);
刪除數據
#刪除所有字段 delete from student;
#刪除符合條件字段 delete from student where id = 1;
查詢語句
#查詢所有表數據 select * from student;
#查詢指定字段的所有數據 select stu_name, stu_age from student;
#條件查詢 select * from student where stu_sex = '男'; select * from student where stu_age > 20; 注意:* 代表所有字段
修改數據
update student set stu_age=20,stu_name='張三' where id = 1;
注意:沒有where條件會將該表所有數據都修改
添加約束
添加主鍵約束
alter table 表名 add constraint pk_student primary key 表名(主鍵字段);
刪除主鍵約束
alter table 表名 drop primary key;
添加唯一約束
alter table 表名 add unique key 約束名 (字段);
數據類型
整數型
小數型
float 浮點型,數值范圍為-3.4E38~3.4E38(7個有效位)
double 雙精度實型,數值范圍-1.7E308~1.7E308(15個有效位)
decimal 數字型,128bit,不存在精度損失,常用於銀行帳目計算。(28個有效位)
例如:price decimal(5,2) 該表達式的取值范圍是-999.99~999.99
字符串類型
char 長度255
varchar 長度65535
CHAR和VARCHAR類型聲明的長度表示你想要保存的最大字符數。例如,CHAR(30)可以占用30個字符。 CHAR列的長度固定為創建表時聲明的長度。當保存CHAR值時,
在它們的右邊填充空格以達到指定的長度,而varchar是根據字符串實際長度保存。如果varchar都不夠存可以使用text和longtext
時間類型
時間類型DATE, DATETIME
MySQL以'YYYY-MM-DD HH:MM:SS'格式檢索和顯示DATETIME值
比較日期的大小可以使用比較運算符
select * from student where s_begin > '2004-01-01';
select sysdate() '系統時間'; select now() '當前時間'; select curdate() '當前日期'; select curtime() '當前時分秒';
sysdate() 日期時間函數跟 now() 類似,不同之處在於:now() 在執行開始時值就得到了, sysdate() 在函數執行時動態得到值。看下面的例子就明白了:
select now(), sleep(3), now(); select sysdate(), sleep(3), sysdate ();
被格式化的時間
select DATE_FORMAT(now(),'%Y/%m/%d %T') ;
根據format字符串格式化date值:
%S, %s 兩位數字形式的秒( 00,01, ..., 59)
%I, %i 兩位數字形式的分( 00,01, ..., 59)
%H 兩位數字形式的小時,24 小時(00,01, ..., 23)
%h 兩位數字形式的小時,12 小時(01,02, ..., 12)
%k 數字形式的小時,24 小時(0,1, ..., 23)
%l 數字形式的小時,12 小時(1, 2, ..., 12)
%T 24 小時的時間形式(hh:mm:ss)
%r 12 小時的時間形式(hh:mm:ss AM 或hh:mm:ss PM)
%p AM或PM
%W 一周中每一天的名稱(Sunday, Monday, ..., Saturday)
%a 一周中每一天名稱的縮寫(Sun, Mon, ..., Sat)
%d 兩位數字表示月中的天數(00, 01,..., 31)
%e 數字形式表示月中的天數(1, 2, ..., 31)
%D 英文后綴表示月中的天數(1st, 2nd, 3rd,...)
%w 以數字形式表示周中的天數( 0 = Sunday, 1=Monday, ..., 6=Saturday)
%j 以三位數字表示年中的天數( 001, 002, ..., 366)
%U 周(0, 1, 52),其中Sunday 為周中的第一天
%u 周(0, 1, 52),其中Monday 為周中的第一天
%M 月名(January, February, ..., December)
%b 縮寫的月名( January, February,...., December)
%m 兩位數字表示的月份(01, 02, ..., 12)
%c 數字表示的月份(1, 2, ...., 12)
%Y 四位數字表示的年份
%y 兩位數字表示的年份