【MySQL】DDL數據定義語言、DML數據操作語言、 MySQL的語法規範和要求

SQL

1、 MySQL的語法規範和要求

(1)mysql的sql語法不區分大小寫,SQL語句關鍵字儘量大寫

MySQL的關鍵字和函數名等不區分大小寫,但是對於數據值是否區分大小寫,和字符集與校對規則有關。

show databases;
SHOW DATABASES;

ci(大小寫不敏感),cs(大小寫敏感),_bin(二元,即比較是基於字符編碼的值而與language無關,區分大小寫)

在sql語句中的值,除了數值類型(整數、小數),其他的類型都使用’'引起來。
例如:select * from t_employee where gender ='男';

如果在SQL中需要給字段取別名時,可以給別名加""。
如果別名中間沒有空格,"“可以省略,如果有空格,不能使用”"

select id as "編號", `name` as "姓名" from t_stu; #起別名時,as都可以省略
select id as 編號, `name` as 姓名 from t_stu; #如果字段別名中沒有空格,那麼可以省略""
select id as 編 號, `name` as 姓 名 from t_stu; #錯誤,如果字段別名中有空格,那麼不能省略""

上面的SQL使用``飄號,因爲name和系統關鍵字或系統函數名等預定義標識符重名了。

所有標點符號使用英文狀態下的半角輸入方式

必須保證所有(),單引號,雙引號是成對結束的

(2)命名時:儘量使用26個英文字母大小寫,數字0-9,下劃線,不要使用其他符號

(3)建議不要使用mysql的關鍵字等來作爲表名、字段名等,如果不小心使用,請在SQL語句中使用`(飄號)引起來

(4)數據庫和表名、字段名等對象名中間不要包含空格

(5)同一個mysql軟件中,數據庫不能同名,同一個庫中,表不能重名,同一個表中,字段不能重名

命名規範:
1、必須只能包含 A–Z, a–z, 0–9, _共63個字符
2、不能在對象名的字符間留空格
例如:create database xxx db; #錯誤的

一般 create database test; 創建test數據庫

3、避免重名
同一個DB數據庫中,表不能重名,
同一張表中,字段不能重名
同一個DBMS數據庫管理軟件中,數據庫不能重名
4、命名時不要使用關鍵字
create database database; #錯誤的

(6)標點符號:

必須成對

必須英文狀態下半角輸入方式

字符串和日期類型可以使用單引號’’

列的別名可以使用雙引號"",給表名取別名不要使用雙引號。取別名時as可以省略

如果列的別名沒有包含空格,可以省略雙引號,如果有空格雙引號不能省略。

(7)SQL腳本中如何加註釋

單行註釋:#註釋內容

單行註釋:–空格註釋內容 其中–後面的空格必須有

多行註釋:/* 註釋內容 */

#以下兩句是一樣的,不區分大小寫
show databases;
SHOW DATABASES;

#創建表格
#create table student info(...); #表名錯誤,因爲表名有空格
create table student_info(...); 

#其中name使用``飄號,因爲name和系統關鍵字或系統函數名等預定義標識符重名了。
CREATE TABLE t_stu(
    id INT,
    `name` VARCHAR(20)
);

select id as "編號", `name` as "姓名" from t_stu; #起別名時,as都可以省略
select id as 編號, `name` as 姓名 from t_stu; #如果字段別名中沒有空格,那麼可以省略""
select id as 編 號, `name` as 姓 名 from t_stu; #錯誤,如果字段別名中有空格,那麼不能省略""

2、 SQL分類

SQL:
1、DDL:Data Define Language
數據定義語言,即定義數據的結構。
例如:create,drop,alter
2、DML:Data Manage Language
數據管理語言,對數據值的增、刪、改、查
例如:insert,delete,update,select
3、DCL:Data Control Language
數據控制語言,對權限、事務等的控制
例如:grant,revoke,commit,rollback等

DDL:數據定義語言,定義庫,表結構等,包括create,drop,alter等

數據定義語言,定義數據的結構

DML:數據操作語言,增刪改查數據,包括insert,delete,update,select等

數據管理語言 對數據的增刪改查 非常重要的。

DCL:數據控制語言,權限,事務等管理。

對權限、事務等的控制

3、 DDL 簡單的

DDL 數據定義語言 即定義數據的結構

create、drop、alter

1、查看所有數據庫

show databases;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               |
| community          |
| dianpingdb         |
| eladmin            |
| girls              |
| gloryofkings       |
| gmall              |
| myblog             |
| myemployees        |
| mysql              |
| performance_schema |
| renren_fast        |
| safety             |
| schooldb           |
| sell               |
| sm                 |
| student            |
| sys                |
| test               |
+--------------------+
20 rows in set (0.01 sec)

mysql>

2、指定使用某個數據庫

use 數據庫名;
mysql> use test;
Database changed
mysql> desc test;
ERROR 1146 (42S02): Table 'test.test' doesn't exist
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| stu            |
+----------------+
1 row in set (0.00 sec)

mysql>

3、創建數據庫

create database 數據庫名;

create database 數據庫名 charset 'utf8'; #在mysql中字符集名稱不要使用utf-8

create database 數據庫名 charset 'gbk';
mysql> create database liuawen;
Query OK, 1 row affected (0.00 sec)

mysql> create database liuawen charset `utf-8`;
ERROR 1115 (42000): Unknown character set: 'utf-8'
mysql> create database liuawen charset ‘utf-8’;
ERROR 1115 (42000): Unknown character set: '‘utf'
mysql> create database liuawen charset ‘utf8';
    '> ;
    '> ^C
mysql> create database liuawen charset 'utf8';
ERROR 1007 (HY000): Can't create database 'liuawen'; database exists
mysql> drop database liuawen;
Query OK, 0 rows affected (0.01 sec)

mysql> create database liuawen charset 'utf8';
Query OK, 1 row affected (0.00 sec)

mysql>

4、刪除數據庫

drop database 數據庫名;
mysql> create database liuawen charset 'utf8';
Query OK, 1 row affected (0.00 sec)

mysql> drop database liuawen;
Query OK, 0 rows affected (0.00 sec)

mysql>

5、查看某個庫下的所有表格

show tables ;  #前提是前面有use 數據庫名;的語句
show tables from 數據庫名;
mysql> use  myemployees;
Database changed
mysql> show tables;
+-----------------------+
| Tables_in_myemployees |
+-----------------------+
| departments           |
| employees             |
| jobs                  |
| locations             |
+-----------------------+
4 rows in set (0.00 sec)

mysql> show tables from myemployees;
+-----------------------+
| Tables_in_myemployees |
+-----------------------+
| departments           |
| employees             |
| jobs                  |
| locations             |
+-----------------------+
4 rows in set (0.00 sec)

mysql>

6、創建表格

create table 【數據名.】表名(
	字段名1 數據類型,
	字段名2 數據類型,
	....
);

7、刪除表格

drop table 【數據庫名.]表名稱;

8、查看某個表結構

describe 【數據庫名.]表名稱;
desc 【數據庫名.]表名稱;

9、增加一列

alter table 【數據庫名.]表名稱 add 【column】 字段名 數據類型;
alter table 【數據庫名.]表名稱 add 【column】 字段名 數據類型 first;
alter table 【數據庫名.]表名稱 add 【column】 字段名 數據類型 after 另一個字段;

10、刪除一列

alter table 【數據庫名.]表名稱 drop 【column】 字段名;

11、修改列數據類型

alter table 【數據庫名.]表名稱 modify 【column】 字段名 新數據類型;

12、修改列名

alter table 【數據庫名.]表名稱 change【column】 舊字段名 新字段名 新數據類型;

13、修改列的位置

alter table 【數據庫名.]表名稱 modify 【column】字段名 數據類型 first;
alter table 【數據庫名.]表名稱 modify 【column】字段名 數據類型 after 另一個字段;

14、修改表名稱

alter table 舊錶名 rename 新表名;
rename table 舊錶名 to 新表名;
#一、DDL
#(一)操作database的SQL
#1、查看當前mysql數據庫管理軟件中的所有數據庫
show databases;

#2、使用某個數據庫
use 數據庫名;

#例如:use test;

#3、創建一個數據庫
create database 數據庫名;

#例如:
create database library;

#4、刪除一個數據庫
drop database 數據庫名;

#例如:
drop database  0513db;

#(二)操作表結構的SQL
1、查看某個數據庫下的所有表格
show tables;

mysql> show tables;
ERROR 1046 (3D000): No database selected
解決方案有兩種:
(1)先use,再操作表格
use 數據庫名;
show tables;2show tables from 數據名;

2、創建某個表格
create table 【數據庫名.】表名稱(字段名1 數據類型,字段名2 數據類型,字段名3 數據類型);
create table 【數據庫名.】表名稱(
	字段名1 數據類型,
	字段名2 數據類型,
	字段名3 數據類型
);
說明:如果前面有use語句,那麼【數據庫名.】可以省略

例如:
create table test.t_stu(
	sid int,
	sname varchar(20),
	gender char,
	birthday date,
	score double
);

3、查看錶結構
desc 表名稱;

mysql> desc t_stu;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| sid      | int(11)     | YES  |     | NULL    |       |
| sname    | varchar(20) | YES  |     | NULL    |       |
| gender   | char(1)     | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
| score    | double      | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
類似於通過Class對象看類的信息。

4、修改表名稱
rename table 舊錶名 to 新表名;
alter table 舊錶名 rename 新表名;
例如:
rename table t_stu to student;
alter table student rename t_stu;

5、修改表結構
(1)增加一列,增加一個字段
alter table 表名稱 addcolumn】 字段名 數據類型; #默認添加到最後
alter table 表名稱 addcolumn】 字段名 數據類型 first;
alter table 表名稱 addcolumn】 字段名 數據類型 after 另一個字段;

例如:增加一列,存儲電話號碼
alter table t_stu add  tel char(11);

增加一列,存儲地址,添加到第一列的位置
alter table t_stu add  address varchar(50) first;

增加一列,年齡,添加到sname的後面
alter table t_stu add  age int after sname;2)修改,字段的數據類型或位置 modify 僅僅是修改字段數據類型 modify
alter table 表名稱 modifycolumn】 字段名 新的數據類型;
alter table 表名稱 modifycolumn】 字段名 數據類型 first;
alter table 表名稱 modifycolumn】 字段名 數據類型 after 另一個字段;

例如:修改gender的數據類型爲char(2)
alter table t_stu modify   gender char(2);
例如:修改address的位置到最後一列
alter table t_stu modify   address varchar(50) after tel;3)修改,列的名稱
alter table 表名稱 change  【column】 舊字段名  新的字段名 數據類型;
例如:修改列的名稱tel爲phone
alter table t_stu change tel phone char(11);4)刪除一列
alter table 表名稱 dropcolumn】 字段名;

例如:刪除地址列
alter table t_stu drop address;

6、刪除整張表
drop table 表名稱;

例如:drop table t_stu;

4、 DML 簡單的

DML:操縱數據的 增刪改查呢

1、添加數據

insert into 【數據庫名.]表名稱 values(值列表); 
#要求值列表的順序、個數、類型,要與表格中的字段的順序、個數、類型一一匹配

insert into 【數據庫名.]表名稱(部分字段列表) values(值列表);
#要求列表的順序、個數、類型,要與前面的(部分字段列表)的順序、個數、類型一一匹配

insert into 【數據庫名.]表名稱 values(值列表1),(值列表2)。。。;

insert into 【數據庫名.]表名稱(部分字段列表) values(值列表1),(值列表2)。。。;

2、修改數據

update 【數據庫名.]表名稱 set 字段名1 = 值1, 字段名2 = 值2 。。。 【where 條件】;

如果沒有加where條件,表示修改所有行,這個字段的值

3、刪除數據

delete from 【數據庫名.]表名稱 【where 條件】;

如果沒有where條件,表示刪除整張表的數據;

truncate 【數據庫名.]表名稱;#刪除整張表的數據,還可以使用這個語句,效率更高,但是它不能回滾

用delete刪除整張表和用truncate刪除整張表的數據的區別?

(1)truncate速度快

(2)truncate無法回滾

truncate因爲底層是把表drop掉,然後新建了一張空表。

delete因爲底層是一行一行刪數據。

4、簡單查詢數據

select * from 【數據庫名.]表名稱; #查詢整張表的所有數據

select 字段列表  from 【數據庫名.]表名稱;  #查詢部分列表

select * from 【數據庫名.]表名稱 【where 條件】;

select 字段列表  from 【數據庫名.]表名稱 【where 條件】;

使用distinct可以對查詢結果進行去重

#二、DML:增刪改查    對於程序員來說,DML的重要性要比你掌握DDL還要重要。
1、添加數據,往表中插入數據
(1insert into 【數據庫名.】表名稱 values(值列表);
		要求爲所有列賦值,(值列表)的類型、數量與表結構中列的類型、數量一致
(2insert into 【數據庫名.】表名稱(字段列表) values(值列表);(字段列表)指定的列賦值,(值列表)的數量與(字段列表)的類型、數量對應
(3insert into 【數據庫名.】表名稱 values(值列表1),(值列表2)。。。;4insert into 【數據庫名.】表名稱(字段列表) values(值列表1),(值列表2)。。。;

mysql> desc t_stu;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| sid      | int(11)     | YES  |     | NULL    |       |
| sname    | varchar(20) | YES  |     | NULL    |       |
| gender   | char(1)     | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
| score    | double      | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)
例如:
insert into t_stu values(1,'張三','男','1995-05-09',89.5);

mysql> insert into t_stu values(2,'李四',60);
ERROR 1136 (21S01): Column count doesn't match value count at row 1'

insert into t_stu(sid,sname,score) values(2,'李四',60);

insert into t_stu values
(3,'王五','男','1993-05-09',80.5),
(4,'趙六','女','1992-05-09',82.5),
(5,'錢七','男','1991-05-09',82.5);

insert into t_stu(sid,sname,score) values
(6,'李六',60),
(7,'李七',70);

2、修改
update 【數據庫名.】表名稱 
set 字段名1 = 新值,
	字段名2 = 新值,
	字段名3 = 新值
	。。。
【where 條件】;

說明:如果沒有where條件,說明修改所有行的這幾個字段的值
	
例如:修改所有人的成績爲80update t_stu set score = 80;

例如:修改李四的成績爲40update t_stu set score = 40 where sname = '李四';

例如:把沒有填寫性別的學生的性別都設置爲'男'
update t_stu set gender = '男' where gender <=> null;
update t_stu set gender = '男' where gender is null;
<=> 安全等於 
例如:修改所有人的成績都加10update t_stu set score = score + 10;

3、刪除數據
delete from 表名稱 【where 條件】;

例如:刪除所有數據,表結構還在
delete from t_stu;

例如:刪除成績是82.5的學生
delete from t_stu where score = 82.5;

4、查詢數據
(1select * from 表名稱;2select * from 表名稱 【where 條件】;3select 字段列表 from 表名稱 【where 條件】;

例如:查詢全部
select * from t_stu;

例如:查詢哪些學生沒有填寫性別
select * from t_stu where gender is null;

例如:查詢沒有填寫性別的學生的姓名
select sname from t_stu where gender is null;

例如:查詢沒有填寫性別的學生的姓名和成績
select sname,score from t_stu where gender is null;

5、查詢時給字段取別名
字段名 as "別名"
其中:
(1)如果""中的別名沒有空格,可以省略""
(2)這個as可以省略

例如:查詢沒有填寫性別的學生的姓名和成績,查詢結果sname顯示姓名,score顯示成績
select sname as "姓名",score as "成績" from t_stu where gender is null;

select sname 姓名,score 成績 from t_stu where gender is null;

5、參考資料

記錄 - 搞定Java核心技術

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章