【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;
(2)show 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 表名称 add 【column】 字段名 数据类型; #默认添加到最后
alter table 表名称 add 【column】 字段名 数据类型 first;
alter table 表名称 add 【column】 字段名 数据类型 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 表名称 modify 【column】 字段名 新的数据类型;
alter table 表名称 modify 【column】 字段名 数据类型 first;
alter table 表名称 modify 【column】 字段名 数据类型 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 表名称 drop 【column】 字段名;
例如:删除地址列
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、添加数据,往表中插入数据
(1)insert into 【数据库名.】表名称 values(值列表);
要求为所有列赋值,(值列表)的类型、数量与表结构中列的类型、数量一致
(2)insert into 【数据库名.】表名称(字段列表) values(值列表);
为(字段列表)指定的列赋值,(值列表)的数量与(字段列表)的类型、数量对应
(3)insert into 【数据库名.】表名称 values(值列表1),(值列表2)。。。;
(4)insert 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条件,说明修改所有行的这几个字段的值
例如:修改所有人的成绩为80分
update t_stu set score = 80;
例如:修改李四的成绩为40分
update t_stu set score = 40 where sname = '李四';
例如:把没有填写性别的学生的性别都设置为'男'
update t_stu set gender = '男' where gender <=> null;
update t_stu set gender = '男' where gender is null;
<=> 安全等于
例如:修改所有人的成绩都加10分
update 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、查询数据
(1)select * from 表名称;
(2)select * from 表名称 【where 条件】;
(3)select 字段列表 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核心技术
上一篇: cpu与风扇接触不良引起突然黑屏故障
下一篇: CPU插槽接触不良导致无法启动
推荐阅读
-
SQL语句的数据操作语言 (DML) 和 数据定义语言 (DDL)使用介绍
-
MySQL中的DDL(Data Definition Language,数据定义语言)
-
MySQL数据定义语言DDL的基础语句
-
MySQL数据库笔记六:数据定义语言及数据库的备份和修复
-
【MySQL】DDL数据定义语言、DML数据操作语言、 MySQL的语法规范和要求
-
七、MySQL DDL数据定义语言 学习笔记(库和表的创建、修改、删除详解 + 强化复习)
-
mysql基础---DDL语言,库和表的管理,常见数据类型介绍,常见约束。
-
SQL语句的数据操作语言 (DML) 和 数据定义语言 (DDL)使用介绍
-
MySQL中的DDL(Data Definition Language,数据定义语言)
-
MySQL数据定义语言DDL的基础语句