數字類型
整數: tinyint、smallint、mediumint、int、bigint
浮點數: float、double、real、decimal
日期和時間: date、time、datetime、timestamp、year
字符串類型
字符串: char、varchar
文本: tinytext、text、mediumtext、longtext
二進制(可用來存儲圖片、音樂等): tinyblob、blob、mediumblob、longblob
複製代碼
service mysql start; (開啓服務) 須要管理員密碼
service mysql stop; (關閉服務)
service mysql status; (查看mysql服務運行狀態)
複製代碼
mysql -h ip地址 -u 用戶 -p密碼;
例如:一個須要在本機登陸的用戶名是suhang 密碼是123456 登陸命令應該是這樣的 mysql -h localhost -u suhang -p123456
其中localhost表明的是本機的ip地址(這是普通的用戶的登陸方式);對於root用戶 只須要講用戶名換爲root便可.
複製代碼
create user 用戶名 identified by 密碼;
例如:建立一個用戶名是suhang密碼是123456的用戶: create user 'suhang' identified by '123456';
複製代碼
讀取 select
更新 update
刪除 delete
建立 create
刪除 表,庫 drop
如果挨個添加麻煩 可使用 all privileges 附給全部權限
賦予權限的命令以下 grant 權限 on 數據庫名/數據表名.* to '用戶名'@'%'; 百分號表明的是登陸該用戶的主機地址能夠是任意的。
一個簡單的例子:爲zhangsan數據庫添加一個zhang的管理員,賦予zhang的權限有讀取select和刪除drop的操做,要求該用戶只能夠經過本機登錄:
grant select drop zhangsan.* to 'zhang'@'localhost';
要是要求該用戶能夠從任意的ip地址登陸,將%改成localhost.
相應的:有增長權限,就會有移除權限,下面介紹移除權限的命令:
revoke 權限 on 數據庫名/表名.* from '用戶名'@'%';須要注意的是增長權限和刪除權限以後,都須要執行權限更新的操做執行flush privileges;
複製代碼
selct user,db,drop_priv,select_priv,delete_priv,update_priv,create_priv from mysql.db where user='用戶名';
上面的命令會打印出查找的用戶對於本身的數據庫的執行權限(僅有命令中的權限)
複製代碼
select user from mysql.user;
複製代碼
(2).解鎖用戶: alter user '用戶名'@'ip地址' account unlock;
複製代碼
create user '用戶'@'ip' identified by 'new_password';
grant '舊用戶'@'ip' to '新用戶'@'ip';
複製代碼
規範;Savepoints參數表示是否支持保存點,以方便事物的回滾操做。
複製代碼
create table 表名 {
屬性名 數據類型 {完整約束條件}
屬性名 數據類型 {完整約束條件}
....
屬性名 數據類型 {完整約束條件}
};
下面是個簡單的例子:
mysql> use example;
Database changed
mysql> create table student(
-> id int,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.09 sec)
上面建立表的時候涉及到一個完整性約束條件,下面就列出一個完整性約束條件表:
約束條件 說明
PRIMARY KEY 標識該屬性爲該表的主鍵,能夠惟一的標識對應的元組
FOREIGN KEY 標識該屬性爲該表的外鍵,是與之聯繫某表的主鍵
NOT NULL 標識該屬性不能爲空
UNIQUE 標識該屬性的值是惟一的
AUTO_INCREMENT 標識該屬性的值是自動增長的,這是Mysql的SQL語言的特點
DEFAULT 爲該屬性設置默認值
下面講解一下完整性約束條件的應用:
(1)單字段主鍵格式:屬性名 數據類型 PRIMARY KEY
示例:
mysql> create table student1(
-> id int PRIMARY KEY,
-> name varchar(20),
-> );
Query OK, 0 rows affected (0.06 sec)
(2)多字段主鍵格式:屬性名 數據類型 PRIMARY EKY(屬性名1,屬性名2,....,屬性名n)
示例:
mysql> create table student2(
-> id int,
-> stu_id int,
-> name varchar(20),
->PRIMARY KEY(id,stu_id)
->);
Query OK,0 rows affected(0.00 sec)
(3)設置表的外鍵
格式:CONSTRAINT 外鍵別名 FOREIGN KEY(屬性1,屬性2,...,屬性n)REFERENCES 表名(屬性1',屬性2',...,屬性n')
示例:
mysql> create table teacher(
-> id int PRIMARY KEY,
-> stu_id int,
-> name varchar(20),
-> CONSTRAINT STUID FOREIGN KEY(stu_id)REFERENCES student1(id)
->);
Query OK, 0 rows affected(0.00 sec)
(4)設置表的非空約束
格式:屬性名 數據類型 NOT NULL
(5)設置表的惟一約束
就是這個屬性的值不能重複的
格式:屬性名 數據類型 UNIQUE
(6)設置標的屬性的值自動增長
AUTO_INCREMENT約束的字段能夠是任何整數類型(TINYINT,SMALLINT,INT和BIGINT),在默認狀況下,該字段的值是從1開始自增
格式:屬性名 數據類型 AUTO_INCREMENT
(7)設置標的屬性的默認值
格式:屬性名 數據類型 DEFAULT 默認值
下面對於4-7進行綜合性講解
mysql> create table student3(
->id int PRIMARY KEY AUTO_INCREMENT,
->name varchar(20) NOT NULL,
->sex varchar(10) DEFAULT 'male'
->);
Query OK, 0 rows affected (0.01 sec)
複製代碼
查看錶的基本結構語句DESCRIBE
格式: DESCRIBE 表名;
經過查看錶的結構,就很明確的對錶進行解讀,並且能夠查看一下本身建立的表有沒有錯誤,這個SQL語句必需要會的啊
複製代碼
格式 SHOW CREATE TABLE 代表;
複製代碼
(1).修改表名
代表能夠在一個數據庫中惟一的肯定一個表。
格式:alter table 舊錶名 raname 新表名;
示例:
mysql> alter table student raname student4;
Query OK, 0 rows affected (0.11 sec)
mysql> describe student;
ERROR 1146 (42S02): Table 'example.student'
doesn't exist
由上面的能夠看出,更名後的表已經不存在了.
複製代碼
格式:alter table 表名 MODIFY 屬性名 數據類型;
複製代碼
格式:alter table 表名 CHANGE 舊屬性名 新屬性名 新數據類型;
複製代碼
格式:alter table 表名 add 屬性1 數據類型[完整性約束條件] [first|after 屬性名2]
其中,’屬性名1‘參數指須要增長的字段的名稱;'FIRST'參數是可選參數,其做用是將新增字段設置爲表的第一個字段;'alter'參數也是可選參數,其做用是將新增字段添加到’屬性名2‘
後面;’屬性名2‘固然就是指表中已經有的字段.
示例:在student1表中添加字段teacher_name ,數據類型爲varchar(20),完整性約束條件是 NOT NULL,將此字段添加到id字段的後面;
alter table student1 add teacher_name varchar(20) NOT NULL after id;
複製代碼
格式: alter table 表名 drop 屬性名;
示例:在student1中刪除剛纔添加的屬性名teacher_name
alter table student1 drop teacher_name;
複製代碼
格式:alter table 表名 engine=存儲引擎名;
複製代碼
格式:alter table 表名 drop foreign key 外鍵別名;
複製代碼
刪除被其餘表關聯的父表: 方法1:先刪除子表,再刪除父表 方法2:刪除父表的外鍵約束(上面有介紹),在刪除該表
複製代碼
insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);
有時咱們只須要插入部分數據, 或者不按照列的順序進行插入, 可使用這樣的形式進行插入:
insert into students (name, sex, age) values(「孫麗華」, 「女」, 21);
複製代碼
select 屬性名 from 表名稱 [查詢條件];
按照特定條件進行查詢
where 關鍵詞用於指定查詢條件, 用法形式爲: select 列名稱 from 表名稱 where 條件;
以查詢全部性別爲女的信息爲例, 輸入查詢語句: select * from students where sex=」女」;
更加高級的操做:
查詢年齡在21歲以上的全部人信息: select * from students where age > 21;
查詢名字中帶有 「王」 字的全部人信息: select * from students where name like 「%王%」;
查詢id小於5且年齡大於20的全部人信息: select * from students where id<5 and age>20;
複製代碼
update 表名稱 set 列名稱=新值 where 更新條件;
示例:將id爲5的手機號改成默認的」-「: update students set tel=default where id=5;
將手機號爲 13288097888 的姓名改成 「張偉鵬」, 年齡改成 19: update students set name=」張偉鵬」, age=19 where tel=」13288097888″;
複製代碼
delete from 表名稱 where 刪除條件;
刪除id爲2的行: delete from students where id=2;
刪除全部年齡小於21歲的數據: delete from students where age<20;
刪除表中的全部數據: delete from students;
複製代碼
備註:上述文件的列名稱就是字段mysql