MYSQL-DDL和DML

1、SQL简介

*结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名

*编写规范

    1) sql语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。

    2) 连接符or、in、and、以及=、<=、>=等前后加上一个空格。

    3) 对较为复杂的sql语句、过程、函数加上注释,说明算法、功能。

    4) 多表连接时,使用表的别名来引用列

2、DQL\DML语句

1、DDL(数据定义语言)是用来定义数据结构,完成数据库对象的创建(CREATE)、修改(ALTER)、删除(DROP)

数据库对象包括:数据库实例、数据表、视图、索引、约束、触发器、存储过程

2、创建数据库语法:CREATE DATABASE 数据库名称、查看已有的数据库:SHOW DATABASES、使用已创建的数据库:USE 数据库名称

在使用CREATE语句创建数据库实例时,要求满足数据库命名规范:数据库名称不能重复、数据库命名可以使用字母、数字和下划线,不能出现其他字符、数据库命名不能超过30个字符、数据库命名不能与系统关键字冲突、数据库命名尽量有意义,比如体现数据库属于哪个系统使用

3、创建数据库时,有时为了避免乱码,需要指定字符集

默认使用的latin1字符集,语法:CREATE DATABASE 数据库名    DEFAULT CHARACTER SET 字符集 COLLATE 校对集

例子:CREATE DATABASE test_db DEFAULT CHARACTER SET utf8 COLLATE utf8_generel_ci;

查看MySQL支持的字符集命令:SHOW CHARACTER SET、查看MySQL字符集支持的校对集命令:SHOW COLLATION

MySQL对字符集的支持分为四个层次:服务器、数据库、数据表、连接

查看各层级字符集命令: SHOW VARIABLES LIKE '%char%';查看校对集命令: SHOW VARIABLES LIKE '%collation%';

4、创建数据表

语法:CREATE TABLE 表名(属性名称 数据类型[约束],……)

查看已有的数据表命令:SHOW TABLES、查看已创建的数据表属性命令:DESC 表名,例子:

创建数据表时,也需要遵循命名规范,规范和数据库名称相同

5、MySQL数据库支持的数据类型:整型、浮点型、字符串、日期和时间

其他数据类型:enum数据类型、set数据类型

当数据表中的属性定义为这两种类型时,代表只能从指定的集合中取值;它们之间的区别是:enum类型只能取一个值,set类型可以取多个值。例子:

enum数据类型定义的集合最多允许有65535个成员值、set数据类型定义的集合最多允许有64个成员值

6、数据表约束主要有:

1)主键约束(PRIMARY KEY):通过数据表中的一个或多个属性能够标识表中的唯一一行记录,这一个或多个属性称为该表的主键

主键约束体现关系数据库的实体完整性:定义为主键的属性不允许为空、定义为主键的属性不允许输入重复值、一个表只能有一个主键、定义主键约束时,会在主键列自动创建索引,加快对主键的查询速度;如果主键由多个属性组成,则必须定义为表级约束

2)外键约束(FOREIGN KEY):建立和强调两个表之间的关联,确保数据的完整性和一致性

例:A表中的属性是另外一个B表中能够唯一确定一行记录的键,这个属性就称为A表的外键,其中B表为主表或外表,A表为从表

外键约束体现关系数据库的参照完整性:

-主表中被子表外键关联的属性进行更新或删除操作,会关联子表中的外键列

-子表中外键列输入的数据必须是主表关联属性中已有的值

-主表中被外键关联的属性必须建立索引,因此一般主表的主键或唯一键可以作为从表的外键关联属性

-子表中的外键与主表中的关联属性数据类型要一致

-定义外键约束的表类型必须是InnoDB,只有InnoDB类型的表才支持外键

-对于非InnoDB表,外键约束会被忽略

FOREIGN KEY指定test_table1表中的属性name为外键约束

REFERENCES关联父表test_table2中的主键属性n

ON DELETE、ON UPDATE指明父表中对主键进行删除、更新操作,不指定则表示不能进行删除、更新操作

CASCADE表明子表中外键字段值也会被更新或删除,除了CASCADE,还可以使用SET NULL(父表更新或删除时,子表字段值设置为NULL)、NO ACTION(父表更新或删除时,子表不进行任何操作)

3)唯一约束(UNIQUE):确保不是主键的属性不会出现重复数据;定义唯一约束时,也会自动创建唯一索引

唯一约束与主键约束的区别:

一个表只能定义一个主键约束,但是可以定义超过1个唯一性约束;主键约束不允许属性值为空,而唯一性约束的属性允许为空

4)非空约束(NOT NULL)、空值约束(NULL)           

5)默认值约束(DEFAULT):即向表中插入数据时,如果用户没有明确给出属性的值,数据库会自动为该属性添加默认值

 6)AUTO_INCREMENT:当属性列定义为AUTO_INCREMENT时,能够为新插入的行赋值为上一次插入的值+1

MySQL要求AUTO_INCREMENT只能用于作为主键的列

数据表中的属性可以同时定义多个约束,但是需要注意:

如果同一个属性有默认值约束和其他约束,默认值要写在其他约束前面;如果同一个属性有多个约束,中间使用空格分隔开

在其他数据库管理工具中,如SQL Server还支持检查约束(check),但是MySQL数据库不支持,如果需要可以通过enum枚举类型或者触发器来实现检查

在MySQL数据库中创建数据表的同时,也可以指定表类型和字符集(语法:CREATE TABLE 表名(……)[ENGINE=表类型][DEFAULT CHARSET=字符集])

字符集:和数据库支持的字符集相同     表类型:在MySQL数据库中常用的表类型有2个-InnoDB、MyISAM

默认情况下创建的表类型是InnoDB

两种常用的表类型各有优劣,主要区别:

MyISAM类型强调性能,执行速度比InnoDB更快, 但不支持事务等高级处理;InnoDB类型支持事务、外键等高级数据库功能

7、修改数据库(使用alter命令来完成数据库的修改,一般是修改数据库的字符集和校对集)

语法:ALTER DATABASE 数据库名称                                                           DEFAULT CHARACTER 字符集 COLLATE 校对集

8、修改数据表

新增属性,语法: ALTER TABLE 表名 ADD 属性名称 数据类型[约束]

例子: ALTER TABLE test_table ADD name VARCHAR(20) NOT NULL;

修改属性,语法: ALTER TABLE 表名 MODIFY 属性名称 数据类型[约束]

语法: ALTER TABLE 表名 CHANGE 属性名称 属性名称 数据类型[约束]

例子: ALTER TABLE test_table MODIFY name VARCHAR(20);       ALTER TABLE test_table CHANGE name name VARCHAR(20);

9、修改属性名称,语法: ALTER TABLE 表名 CHANGE 属性原名称 属性新名称 数据类型[约束]

例子: ALTER TABLE test_table CHANGE name name_new VARCHAR(20);

删除属性,语法:ALTER TABLE 表名 DROP 属性名称

例子:ALTER TABLE test_table DROP name;如果表中只有一个属性,不允许删除

10、新增属性约束,语法:ALTER TABLE 表名 ADD CONSTRAINT 约束别名 约束

例子:ALTER TABLE test_table ADD CONSTRAINT PRIMARY KEY(id);

ALTER TABLE test_table ADD CONSTRAINT fk FOREIGN KEY test_table(name) REFERENCES test_table2(name);

ALTER TABLE test_table ADD CONSTRAINT un UNIQUE(name);          ALTER TABLE test_table ALTER id SET DEFAULT 20;

删除属性约束,语法:ALTER TABLE 表名 DROP 约束

例子: ALTER TABLE test_table DROP PRIMARY KEY;                          ALTER TABLE test_table DROP FOREIGN KEY fk;

11、修改表名,语法:ALTER TABLE 表名 RENAME TO 新表名            语法:RENAME TABLE 原表名 TO 新表名

例子:ALTER TABLE test_table RENAME TO test_table_new;               RENAME TABLE test_table TO test_table_new;

12、删除数据库

语法:DROP DATABASE 数据库名称                                                       例子: DROP DATABASE test_db;

删除数据表

语法:DROP TABLE 表名                                                                         例子: DROP TABLE test_table;

删除数据库、数据表时,如果数据库、数据表不存在,命令执行会出错

当不确定数据库、数据表是否存在时,可以增加控制流语句来判断,避免命令出错

例子: DROP DATABASE IF EXISTS test_db;                                        DROP TABLE IF EXISTS test_table;

IF EXISTS或者IF NOT EXISTS同样可以用于数据库、数据表的创建

DML(数据操纵语言)是用于维护数据表中的具体数据,完成数据的增加(INSERT)、更新(UPDATE)、删除(DELETE)

13、数据插入,语法:INSERT INTO 表名(属性1,属性2,……) VALUES(值1,值2,……)       

例子:INSERT INTO test_table(id,name)VALUES(1,'zhangsan');

向数据表中插入数据时,值与属性要一一对应,且数据类型要匹配;还需要注意属性的约束要满足;当使用INSERT语句向表中插入数据时,如果不指定具体属性,则表示向所有属性中插入数据

例子: INSERT INTO test_table VALUES(1,'zhangsan');

特殊用法:将一张表中的数据插入到另外一张表;语法:INSERT INTO 表名1(属性1,….) SELECT 表名2.属性1,…. FROM 表名2

例子: INSERT INTO test_table1 SELECT id,name FROM test_table;

需要注意,在当前这种用法中,SELECT语句查询到的属性值和向表1中插入的属性要一一对应,且数据类型要相同,属性约束要满足

14、数据更新

语法:UPDATE 表名 SET 属性1=新值1,属性2=新值2,..[WHERE条件子句];例子: UPDATE test_table SET name='lisi' WHERE id=1

UPDATE语句会将数据表中满足WHERE条件的对应元组的属性1、属性2…更新为新的值

如果后面不接WHERE条件子句,则会更新整张表的所有数据

15、数据删除

语法:DELETE FROM 表名 [WHERE条件子句]                                      例子: DELETE FROM test_table WHERE id=1;

DELETE语句会将数据表中满足WHERE条件的对应元组删除;如果后面不接WHERE条件子句,则会删除数据表中的所有数据

另外一种删除数据的方法,语法:TRUNCATE TABLE 表名                    例子: TRUNCATE TABLE test_table;

TRUNCATE和DELETE的区别:

-DELETE可以通过WHERE条件选择要删除的部分数据,并返回被删除的记录数,使用灵活,但执行速度不快

-TRUNCATE不能删除指定的部分数据,而且不会返回被删除的记录数,但执行速度非常快

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,169评论 0 9
  • 作者:烨竹 数据库的基本操作 登陆MySQL数据库服务:mysql -h服务器地址 -P端口号 -u用户名 ...
    DragonRat阅读 1,360评论 0 7
  • 系统用户: 1.sys system(sys权限最高) 2.sysman(操作企业管理器) 密码是安装的时候输入的...
    3hours阅读 1,550评论 0 0
  • 回顾 字段类型(列类型):数值型,时间日期型和字符串类型 数值型:整型和小数型(浮点型和定点型) 时间日期型:da...
    翊溪阅读 928评论 0 0
  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 1,650评论 0 8