SQL語句:結構化查詢語句,使用SQL與數據庫“溝通”,完成相應的數據庫操作。
語句分類
DDL(Data Definition Languages)語句:即數據庫定義語句,用來創建數據庫中的表、索引、視圖、存儲過程、觸發器等,常用的語句關鍵字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。增刪改表的結構
DML(Data Manipulation Language)語句:即數據操縱語句,用來查詢、添加、更新、刪除等,常用的語句關鍵字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增刪改查。增刪改表的數據
DCL(Data Control Language)語句:即數據控制語句,用於授權/撤銷數據庫及其字段的權限(DCL is short name of Data Control Language which includes commands such as GRANT and mostly concerned with rights, permissions and other controls of the database system.)。常用的語句關鍵字有:GRANT,REVOKE。
TCL(Transaction Control Language)語句:事務控制語句,用於控制事務,常用的語句關鍵字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。
一. DDL語句
增刪改表的結構,代表字段:create,alter,drop
1.1 創建表
創建表CREATE
演示:創建員工表
CREATE TABLE employee(
id int(4),
name VARCHAR(20),
gender CHAR(1),
birth DATE,
salary float(2),
job VARCHAR(30),
deptno int(2)
);
設置默認值 DEFAULT
可以通過DEFAULT子句給列指定默認值
CREATE TABLE emptest(
id int(4),
name VARCHAR(20),
gender CHAR(1) DEFAULT 'M',
birth DATE
);
設置列值非空NOT NULL
默認情況下,任何列都允許有空值。非空(NOT NULL)是一種條件約束,用於確保字段值不為空,當某個字段被設置了非空約束條件,這個字段中必須存在有效值,即:當執行插入數據操作時,必須提供這個列的數據;當執行更新操作時,不能給這個列的值設置為NULL。Ø NOT NULL:非空
CREATE TABLE emptest(
id int(4) ,
name VARCHAR20) NOT NULL,
gender CHAR(1) DEFAULT 'M',
birth DATE
);
1.2 復制表
復執表中所有數據
CREATE TABLE emptest1 as select * from emptest;
復制表中部分數據
CREATE TABLE emptest2 as select id,name from emptest;
1.3 修改表
修改表名RENAME
演示:修改表名
alter table emptest rename to/as testemp; #修改表名
create table testemp1 like emptest; #創建表結構.這樣的建表方式,不僅僅是表的結構,連帶着索引也會同時創建.
增加列ALTER ADD
演示:在testemp表下面增加hiredate列,並將默認值設置為當前時間增加列,列只能增加在最后,不能插入現有的列中。
ALTER TABLE testemp ADD(hiredate DATE DEFAULT sysdate);
刪除列 ALTER DROP
刪除列,刪除字段需要從每行中刪掉該字段占據的長度和數據,並釋放在數據塊中占據的空間,如果表記錄比較大,刪除字段可能需要比較長的時間。
演示:刪除testemp表下的hiredate
ALTER TABLE testemp DROP (hiredate);
修改列 ALTER MODIFY
修改列,使用MODIFY可以改變表中列的數據類型、長度和默認值,注意這種修改僅對以后插入的數據有效。另外如果表中已經有數據的情況下,把長度由大改小,有可能不成功,比如原來類型是VARCHAR2(100),其中已經存放了100字節長度的數據,如果改為80字節,則不會修改成功。
演示:修改testemp表中name的長度為30
ALTER TABLE testemp MODIFY(name VARCHAR(30));
1.4 查看表的數據結構DESC
DESC employee;
1.5 刪除表DROP
DROP TABLE emptest;
DROP TABLE if exist emptest;
二. DML語句
用於增刪改表中數據,DML是伴隨TCL事務控制的。代表字段:insert,delete, update
增加記錄INSERT
INSERT語句用來給數據表增加記錄,每次增加一條記錄。所有的DML操作,需要再執行事務提交語句COMMIT才算真正確認了此操作。
語法: insert into tablename(columnname1,columnname2,columnname3,c...) values(value1,value2,value3,....);
字段和值必須一一對應,個數必須相同,數據類型必須一致
演示:想testemp中插入一條記錄
INSERT INTO testemp (id,name,gender) VALUES (1,'張三','M');
COMMIT;
插入數據時忽略字段則是全列插入,順序不能錯誤,如下:
INSERT INTO testemp VALUES (10,'李四','F',sysdate);
COMMIT;
注意:如何插入中文數據
使用DOS命令窗口不能直接插入中文,因為DOS窗口是GBK的編碼方式,但是數據庫表只接受UTF-8
因此可以使用圖形化界面工具插入數據,在DOS窗口中查詢的時候出現亂碼,
可以修改查詢結果集的顯示編碼方式。
mysql> set character_set_results ='GBK';
更新表記錄UPDATE
更新表中的記錄,需要配合WHERE子句使用,否則全表的數據都會被更新。
語法: update tablename set 字段名=字段值,字段名=字段值,字段名=字段值 where 條件
演示:更新testemp表中張三的ID為2
UPDATE testemp SET id=2 WHERE name='張三';
COMMIT;
同時修改兩個類型:
UPDATE testemp SET id=5,name='王五' WHERE name='李四';
COMMIT;
刪除表記錄DELETE
刪除表中的記錄,和UPDATE一樣,需要配合WHERE子句使用,不然會將全表數據刪除。
語法: delete from tableame where 條件
演示:將testemp表中id為2的記錄刪除
DELETE FROM testemp WHERE id=2;
清空表:
DELETE FROM testemp;