mysql sql语句书写

一、sql语言简介

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

        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等。

        本篇文章主要讨论的是mysql的DDL和DML的编写,因为DDL和DML是企业开发中最常用的。可能有人会问了,为啥子要讨论mysql,不讲别的数据库呢。呵呵,本人进入IT最先了解的数据库就是mysql,so。。。

        下面开始进入正题了

二、正题

1.书写规范

        无规矩不成方圆,尤其是在企业开发中,如果人人都按照自己的想法做,这样就很容易导致开发混乱,后期维护困难,review尴尬的局面。所以还是先提一下规范要求吧,别嫌我啰嗦,遵守开发规范能养成良好的开发习惯,好的开发习惯会让你在IT开发中受益匪浅的。

        1.1  保留字关键字全部大写,其余的小写。这样的好处是美观大方,拿得出去带的回来,哈哈哈

        1.2   表名、字段名或索引名等建议遵守下划线命名法。驼峰命名不适合。mysql是大小写不敏感的,像user、User、UsEr等这些在mysql中都是一致的,等同于user。  像test_user,user_family就是好孩子。。。

2.DDL

        2.1  创建表

模板

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

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

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

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

PRIMARY KEY(【字段名c1】),

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

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

说明

一般的做法是先删除以前存在的同名表,然后再创建新表,也可以CREATE TABLE IF NOT EXISTS 【库名a】.【表名b】(),防止误删表。

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

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

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

CHARSET:指定字符集,企业开发一般都使用utf8。

示例

DROP TABLE IF EXISTS test_dev.test_user;

CREATE TABLE 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.1节)。

        2.3    创建索引

模板

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

说明

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

INDEX|KEY:使用其中一个即可。

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

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

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

示例

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    删除索引

模板

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

示例

ALTER    TABLE    test_dev.test_user    DROP    INDEX    unq_comment ;

说明

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

        2.5    修改索引

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


3.DML

        3.1  insert语句

模板

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时就不用手动添加了,数据库会自动处理。

示例

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

说明

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

        3.2  update语句

模板

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

说明

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

示例

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语句

模板

单表删除

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

多表删除

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

说明

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

示例

单表删除

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表

模板

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

说明

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

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

示例

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 表。

三、结束语

欢迎留言交流,tks。


mysql sql语句书写_第1张图片

你可能感兴趣的:(mysql sql语句书写)