mysql语句示例

 

目录

 

前言 

1.规范要求

2.DDL

2.1 创建表

2.1.1 模板

2.1.2 示例

2.2 删除表

2.2.1 模板

2.2.2 示例

2.3 创建索引

2.3.1 模板

2.3.2 示例

2.4 删除索引

2.4.1 模板

2.4.2 示例

2.5 修改索引

2.6 新增字段

2.6.1 模板

2.6.2 示例

2.7 修改字段

2.7.1 模板

2.7.2 示例

3.DML

3.1 insert语句

3.1.1 模板

3.1.2 示例

3.2 update语句

3.2.1 模板

3.2.2 示例

3.3 delete语句

3.3.1 模板

3.3.2 示例

3.4 A表中的数据插入到B表

3.4.1 模板

3.4.2 示例

4.DQL

4.1 select语句

4.1.1 模板

4.1.2 示例


前言 

sql(Structured Query Language)是用于访问和处理数据库的标准计算机语言,主要分为四种。

1.DQL:数据查询语言(Data Query Language),用来获取表中的数据,保留字主要有SELECT、WHERE、ORDER BY、GROUP BY和HAVING等。

2.DML:数据操作语言(Data Manipulation Language),用来新增、变更和删除表中的数据,执行的是行级操作,保留字主要有INSERT、UPDATE和DELETE。

3.DDL:数据定义语言(Data Definition Language),用来创建、删除表或者新增、删除索引等,执行的是表级别的操作,保留字主要有CREAT、DROP、ALTER等。

4.DCL:数据控制语言(Data Control Language),用来设置、更改数据库操作者及其角色权限等,保留字主要有GRANT、REVOKE等。

一般在企业开发中,比较常用的是DQL、DML、DDL这三种。本节主要讨论的就是这三种。

1.规范要求

a)保留字关键字全部大写,其余的小写。

b)表名、字段名或索引名等建议遵守下划线命名法。驼峰命名不适合。mysql是大小写不敏感的,像testUser、TestUsEr等这些在mysql中都是一致的,等同于testuser。建议使用test_user、user_name等。

c)建议给字段和表加上备注信息。

2.DDL

2.1 创建表

2.1.1 模板

CREATE TABLE 【库名a】.【表名b】(

【字段名c1】 【字段类型属性等】,

【字段名c2】 【字段类型属性等】,

PRIMARY KEY(【字段名c1】),

UNIQUE KEY 【唯一索引名k1】(【字段名c2】) USING 【索引方法】 COMMENT '唯一索引xxx'

)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表b的备注'; 

说明:

a)首部也可使用CREATE TABLE IF NOT EXISTS 【库名a】.【表名b】(),防止创建表时报错。

b)一个表最多只有一个AUTO_INCREMENT列。

c)KEY:索引,主键primary key也是唯一索引,用于快速查询。

d)ENGINE:指定表的存储引擎,如:InnoDB,MyISAM,HEAP,EXAMPLE,CSV,ARCHIVE,MERGE, FEDERATED或NDBCLUSTER。如果不指定存储引擎,MySQL将默认使用InnoDB。

e)CHARSET:指定字符集,开发中一般都使用utf8,mysql中没有utf-8。

2.1.2 示例

CREATE TABLE IF NOT EXISTS test_dev.test_user(
user_id INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
user_name VARCHAR(45) DEFAULT NULL COMMENT '用户名',
user_code VARCHAR(255) DEFAULT NULL COMMENT '用户code',
user_update_time DATETIME DEFAULT NULL COMMENT '变更时间',
PRIMARY KEY(user_id),
UNIQUE KEY unq_name_code(user_name,user_code) USING BTREE COMMENT '用户名+code在表中唯一'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

说明:

在test_dev数据库中创建test_user表,其中有字段user_id(主键,自增长,int类型,长度11),user_name(varchar类型,长度45,默认为null)等,唯一索引unq_name_code(user_name+user_code在表中唯一),使用InnoDB引擎,默认字符集utf8。

2.2 删除表

2.2.1 模板

DROP TABLE IF EXISTS 【库名a】.【表名b】;

2.2.2 示例

DROP TABLE IF EXISTS test_dev.test_user;

说明:

若test_dev数据库中存在test_user表,则删除test_user表。

2.3 创建索引

2.3.1 模板

CREATE	[UNIQUE|FULLTEXT|SPATIAL]	[INDEX|KEY]【索引名i】	
USING  [BTREE |HASH]  ON 【库名a】.【表名b】(创建索引的字段名[(length)])[ASC|DESC] 
COMMENT'备注信息';

说明:

a)UNIQUE | FULLTEXT | SPATIAL:分别是唯一索引、全文索引和空间索引。

b)INDEX | KEY:都表示索引,使用其中一个即可。

c)索引名:建议不使用&*等特殊字符,可以使用下划线_。

d)BTREE | HASH:索引结构,BTREE 型或HASH型。

e)创建索引的字段名的length:主要是给字段长度大的类型(比如BLOB和TEXT)使用,如果不使用length,默认使用整列的值创建索引,使用length会根据每列的前length个字符创建索引,这样会减少索引文件的大小,节省磁盘空间。

2.3.2 示例

CREATE UNIQUE INDEX unq_comment USING BTREE 
ON test_dev.test_user (user_comment(10)) COMMENT'备注信息索引';

说明:

 创建唯一索引unq_comment,使用 BTREE 结构,取值test_dev库test_user表中字段user_comment前10个字符。

2.4 删除索引

2.4.1 模板

ALTER    TABLE 【库名a】.【表名b】 DROP    [INDEX|KEY]    【索引名i】;

2.4.2 示例

ALTER TABLE test_dev.test_user DROP INDEX unq_comment;

说明:

删除test_dev库test_user表中索引名为unq_comment的索引。

2.5 修改索引

索引是无法修改的,只能先删除索引(参考2.4 删除索引),然后创建同名索引(参考2.3 创建索引),so这一节我也省略了。

2.6 新增字段

当表已经创建,需要在表中新增字段时使用。

2.6.1 模板

ALTER TABLE 【库名a】.【表名b】 
ADD 【字段名1】 【字段名1的属性】
,ADD 【字段名2】 【字段名2的属性】
,ADD 【字段名3】 【字段名3的属性】
,...;

2.6.2 示例

ALTER TABLE test_dev.test_user 
ADD user_height DOUBLE(5,2) DEFAULT 0.00 COMMENT '身高'
,ADD user_weight DOUBLE(5,2) DEFAULT 0.00 COMMENT '体重';

说明:

test_dev数据库中test_user表新增字段user_height(存储用户身高信息,类型double,默认值0.00)和user_weight(存储用户体重信息,类型double,默认值0.00)。

mysql中类型double、float、decimal一般都需要设置长度和小数点保留几位,如DOUBLE(5,2),括号中5表示数字总长度,不包含小数点,2表示小数点后保留2位,若超过2位则按四舍五入处理。假定要存储1.004,数据库会处理为1.00,存储1.005,则处理为1.01。若要存储2018.01,这个数字长度为6超过总长度5,数据库会报错Out of range value for column。

2.7 修改字段

表中的字段创建后,感觉字段不如意,想重新定义字段属性(不修改字段名)。

2.7.1 模板

ALTER TABLE 【库名a】.【表名b】 
MODIFY 【字段名1】 【字段名1的属性】
,MODIFY 【字段名2】 【字段名2的属性】
,MODIFY 【字段名3】 【字段名3的属性】
,...;

2.7.2 示例

ALTER TABLE test_dev.test_user 
MODIFY user_height VARCHAR(10) DEFAULT '0.00' COMMENT '身高'
,MODIFY user_weight VARCHAR(10) DEFAULT '0.00' COMMENT '体重';

说明:

为防止数据出现Out of range value for column错误,可将test_dev数据库中test_user表字段user_height属性修改为(存储用户身高信息,类型varchar,默认值0.00),user_weight属性修改为(存储用户体重信息,类型varchar,默认值0.00)。

3.DML

3.1 insert语句

3.1.1 模板

INSERT	INTO	【库名a】.【表名b】	
(【字段名1】,【字段名2】,【字段名3】,...) 
VALUES
 (【对应字段1-1的值】,【对应字段2-1的值】,【对应字段3-1的值】,...)

,(【对应字段1-2的值】,【对应字段2-2的值】,【对应字段3-2的值】,...)

,(【对应字段1-3的值】,【对应字段2-3的值】,【对应字段3-3的值】,...);

说明:

 一般主键id是自增长,在insert时就不用手动添加了,数据库会自动处理。

3.1.2 示例

INSERT INTO test_dev.test_user 
(user_name,user_code) 
VALUES 
('张三','zs'),
('张一','zy');

说明:

向test_dev库中test_user表插入两条数据,分别是张三和张一。

3.2 update语句

3.2.1 模板

UPDATE	【库名a】.【表名b】	
SET	
【字段名1】=【对应字段1的值】,
【字段名2】=【对应字段2的值】,
【字段名3】=【对应字段3的值】,
 ...	
WHERE	【条件语句】;

说明:

update每次只能更新一行数据,建议加上where条件,防止误更新整张表的数据。 

3.2.2 示例

UPDATE test_dev.test_user SET user_name='李四',user_code='ls' WHERE user_id=3;

说明:

更新test_dev库中test_user 表中user_id=3的数据,使得user_name=’李四’,user_code=’ls’。

3.3 delete语句

3.3.1 模板

单表删除
DELETE    FROM  【库名a】.【表名A】  	[WHERE	条件];

--------------------------------------------------------------

多表删除
DELETE  【表名A】, 【表名B】    FROM  【库名a】.【表名A】   
LEFT    JOIN    【库名b】.【表名B】    ON    [关联条件]     [WHERE	条件];

说明:

使用delete语句时,建议要加上where语句,防止误删数据。

3.3.2 示例

-- 单表删除
DELETE FROM test_dev.test_user WHERE user_id=3;

-- 多表删除
DELETE tu,tp FROM test_dev.test_user tu LEFT JOIN test_dev.test_person tp ON tu.user_code=tp.person_code WHERE tu.user_id=2;

说明:

单表删除

将test_dev库中test_user表中user_id=3的数据删除。

多表删除

将test_dev库中test_user和test_person表中满足条件user_id=2的数据删除。

3.4 A表中的数据插入到B表

3.4.1 模板

INSERT	INTO	【库名b】.【表名B】	(【字段名B1】,【字段名B2】,【字段名B3】,...) 
SELECT	【字段名A1】,【字段名A2】,【字段名A3】,...	FROM	【库名a】.【表名A】 [WHERE	条件];

说明:

A表和B表的字段要对整,像模板中字段A1的值只能插入给字段B1。

不加WHERE 条件,则A表中的所有数据插入到B表。

3.4.2 示例

INSERT INTO test_dev.test_user (user_name,user_code,user_update_time) 
SELECT person_name,person_code,person_update_time FROM test_dev.test_person WHERE person_id<23;

说明:

将test_dev库中test_person表中person_id<23的数据同步到test_dev库中test_user 表。

4.DQL

DQL一般是进行查询操作,本篇文章就整合到select语句中一起讲吧。

4.1 select语句

4.1.1 模板

SELECT 【字段名1】,【字段名2】,... FROM 【库名a1】.【表名b1】
LEFT JOIN 【库名a1】.【表名b2】 ON (【a1中的字段】 = 【b1中的字段】 [AND 【其他条件】] )
LEFT JOIN 【库名a2】.【表名c1】 ON (【a1或b2中的字段】 = 【c1中的字段】 [AND 【其他条件】] )
...
WHERE 【查询条件】 [ORDER BY 【排序规则】 LIMIT 【起始页码】,【显示数量】];

 说明:

a)LEFT JOIN ... ON ...:左连接查询,以左侧的表为主体进行关联查询,ON后面的为关联条件,若有多个关联条件,各关联条件使用AND连接,最好使用()将关联条件括起。

b)ORDER BY:后面为排序规则,多个排序规则之间使用,连接。

c)LIMIT:分页条件。

4.1.2 示例

SELECT user_id,user_name,order_id,order_code FROM test_dev.test_user
LEFT JOIN test_dev.test_person ON (user_code = person_code)
LEFT JOIN test_pre.pre_order ON (person_code = order_ref_code AND order_status = 1)
WHERE order_code LIKE '201812%' ORDER BY order_time ASC,user_id DESC LIMIT 0,2;

说明:

从test_dev数据库中的表test_user和test_person以及test_pre数据库中的表pre_order,关联条件user_code = person_code和person_code = order_ref_code 及order_status = 1,查询条件为order_code以‘201812’开头,排序规则为优先以order_time升序,order_time相同时以user_id降序排列,分页显示包含第0条在内的2条数据。

 

你可能感兴趣的:(mysql,DDL,DML,sql规范)