SQL 包含以下 4部分:1数据定义语言(DDL):DROP、CREATE、ALTER 等语句。2数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。3数据查询语言(DQL):SELECT 语句。4 数据控制语言(DCL): GRANT、REVOKE、COMMIT、ROLLBACK 等语句。

MySQL之DDL(Data Definition Language): 数据定义语言:CREATE,ALTER,DROP等

DDL:操作数据库,表(CRUD)

1、操作数据库(CRUD)

(1)C(Create):创建数据库

CREATE DATABASE [IF NOT EXISTS]数据库名[[DEFAULT] CHARACTER SET字符集名][[DEFAULT]COLLATE 校对规则名];[ ]中的内容是可选的。

语法说明如下:

数据库名:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。[DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。[DEFAULT] COLLATE:指定字符集的默认校对规则。

eg.

mysql> CREATE DATABASE IF NOT EXISTStest-> DEFAULT CHARACTER SETutf8-> DEFAULTCOLLATE utf8_general_ci;

Query OK,1 row affected, 1 warning (0.01 sec)

(2)R(Retrieve):查询

SHOW DATABASES [LIKE '数据库名'];

语法说明如下:LIKE 从句是可选项,用于匹配指定的数据库名称。LIKE从句可以部分匹配,也可以完全匹配。

数据库名由单引号' '包围。

eg.查询全部

mysql>show databases;+--------------------+

| Database |

+--------------------+

| information_schema | |

| mqcms |

| mysql |

| performance_schema |

| phpmyadmin |

| sys |

| test |

| test_aa |

| ultrax |

+--------------------+

9 rows in set (0.00 sec)

eg.查询某一个(我有test和test_aa两个库)

mysql> show databases like 'test';+-----------------+

| Database (test) |

+-----------------+

| test |

+-----------------+

1 row in set (0.00 sec)

mysql> show databases like '%test%';+-------------------+

| Database (%test%) |

+-------------------+

| dedetest |

| test |

| test_aa |

+-------------------+

3 rows in set (0.00 sec)

这里的like跟模糊查询一样%aa%;%aa;aa%;

eg.查询某个数据库的创建语言

mysql> show create databasetest;+----------+---------------------------------------------------------------+

| Database | Create Database |

+----------+---------------------------------------------------------------+

| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8*/ |

+----------+---------------------------------------------------------------+

1 row in set (0.00 sec)

(3)U(Update):修改

ALTER DATABASE [数据库名]{[DEFAULT] CHARACTER SET |

[DEFAULT] COLLATE }

语法说明如下:ALTER DATABASE用于更改数据库的全局特性。

使用ALTER DATABASE 需要获得数据库 ALTER权限。

数据库名称可以忽略,此时语句对应于默认数据库。CHARACTER SET 子句用于更改默认的数据库字符集。

eg.修改数据库test的字符集

mysql> ALTER DATABASEtest-> DEFAULT CHARACTER SETgb2312-> DEFAULTCOLLATE gb2312_chinese_ci;

Query OK,1 row affected (0.02sec)

mysql> show create databasetest;+----------+-----------------------------------------------------------------+

| Database | Create Database |

+----------+-----------------------------------------------------------------+

| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET gb2312*/ |

+----------+-----------------------------------------------------------------+

1 row in set (0.00 sec)

(4)D(Delete):删除

DROP DATABASE [IF EXISTS] 语法说明如下::指定要删除的数据库名。IF EXISTS:用于防止当数据库不存在时发生错误。DROP DATABASE:删除数据库中的所有表格并同时删除数据库。使用此语句时要非常小心,以免错误删除。如果要使用 DROP DATABASE,需要获得数据库 DROP 权限。

注意:MySQL 安装后,系统会自动创建名为 information_schema 和 mysql 的两个系统数据库,系统数据库存放一些和数据库相关的信息,如果删除了这两个数据库,MySQL 将不能正常工作。

使用 DROP DATABASE 命令时要非常谨慎,在执行该命令后,MySQL 不会给出任何提示确认信息。DROP DATABASE 删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,而且不能恢复。因此最好在删除数据库之前先将数据库进行备份。

eg.删除数据库test_aa;

mysql> DROP DATABASE IF EXISTStest_aa;

Query OK,0 rows affected (0.02sec)

mysql> show databases like 'test%';+------------------+

| Database (test%) |

+------------------+

| test |

+------------------+

1 row in set (0.00 sec)

2、操作数据表(CRUD)

(1)C(Create)创建表

CREATE TABLE ([表定义选项])[表选项][分区选项];

其中,[表定义选项]的格式为: [,…]

CREATE TABLE语句的主要语法及使用说明如下:CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。:指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略 db-name。如果使用加引号的识别名,则应对数据库和表名称分别加引号。例如,'mydb'.'mytbl' 是合法的,但 'mydb.mytbl'不合法。:表创建定义,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。

默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。

eg.创建一张测试表test_tbl;

字段名称

字段类型

字段备注

id

int(11)

ID

name

varchar(20)

名称

age

int(11)

年龄

sex

tinyint(4)

性别0 男 1女 2 未知

mysql> usetest;Databasechanged

mysql>show tables;+----------------+

| Tables_in_test |

+----------------+

| board |

| data |

+----------------+

2 rows in set (0.01sec)

mysql> CREATE TABLEtest_tbl->(-> id INT(11),-> name VARCHAR(20),-> age INT(11),-> sex TINYINT(4)->);

Query OK,0 rows affected (0.03 sec)

复制表结构:

CREATE TABLE like ;

eg.

mysql> CREATE TABLE test_tbl_cp liketest_tbl;

Query OK,0 rows affected (0.01 sec)

(2)R(Retrieve)查看表

查看所有表:

SHOW TABLES;

eg.

mysql>show tables;+----------------+

| Tables_in_test |

+----------------+

| board |

| data |

| test_tbl |

| test_tbl_cp |

+----------------+

4 rows in set (0.00 sec)

查看表结构:

DESCRIBE ;

或简写成:DESC ;

DESCRIBE/DESC 语句可以查看表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等

eg.

mysql> DESCtest_tbl;+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| name | varchar(20) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

4 rows in set (0.00sec)

其中,各个字段的含义如下:Null:表示该列是否可以存储 NULL值。Key:表示该列是否已编制索引。PRI 表示该列是表主键的一部分,UNI 表示该列是 UNIQUE索引的一部分,MUL 表示在列中某个给定值允许出现多次。Default:表示该列是否有默认值,如果有,值是多少。

Extra:表示可以获取的与给定列有关的附加信息,如 AUTO_INCREMENT 等。

SHOW CREATE TABLE语句可以用来显示创建表时的CREATE TABLE语句:

SHOW CREATE TABLE \G;

提示:使用 SHOWCREATE TABLE 语句不仅可以查看创建表时的详细语句,而且可以查看存储引擎和字符编码。如果不加“\G”参数,显示的结果可能非常混乱,加上“\G”参数之后,可使显示的结果更加直观,易于查看。

eg.

mysql> show create tabletest_tbl\G;*************************** 1. row ***************************

Table: test_tblCreate Table: CREATE TABLE`test_tbl` (

`id`int(11) DEFAULT NULL,

`name`varchar(20) DEFAULT NULL,

`age`int(11) DEFAULT NULL,

`sex`tinyint(4) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=gb23121 row in set (0.00 sec)

(3)U(Update)修改

ALTER TABLE [修改选项]修改选项的语法格式如下:

{ADD COLUMN

| CHANGE COLUMN

| ALTER COLUMN { SET DEFAULT | DROP DEFAULT}| MODIFY COLUMN

| DROP COLUMN

| RENAME TO

}

添加字段:

ALTER TABLE ADD [约束条件] [FIRST|AFTER 已存在的字段名];

新字段名为需要添加的字段的名称;FIRST 为可选参数,其作用是将新添加的字段设置为表的第一个字段;AFTER 为可选参数,其作用是将新添加的字段添加到指定的已存在的字段名的后面。

eg.在表test_tbl的name后面添加新字段name_cp:

mysql> ALTER TABLE test_tbl ADD name_cp VARCHAR(20) AFTER name;

Query OK,0 rows affected (0.03sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| name | varchar(20) | YES | | NULL | |

| name_cp | varchar(20) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

修改字段名称:

ALTER TABLE CHANGE ;

其中,旧字段名指修改前的字段名;新字段名指修改后的字段名;新数据类型指修改后的数据类型,如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样,但数据类型不能为空。

eg.修改name的名称改为names

mysql> ALTER TABLEtest_tbl-> CHANGE name names VARCHAR(20);

Query OK,0 rows affected (0.02sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| names | varchar(20) | YES | | NULL | |

| name_cp | varchar(20) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

修改/删除字段默认值:

ALTER TABLE ALTER COLUMN { SET DEFAULT | DROP DEFAULT }

eg.将字段sex的默认值改为2

mysql> ALTER TABLE test_tbl ALTER sex SET DEFAULT 2;

Query OK,0 rows affected (0.01sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| names | varchar(20) | YES | | NULL | |

| name_cp | varchar(50) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | 2 | |

+---------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

修改字段类型:

ALTER TABLE MODIFY 其中,表名指要修改数据类型的字段所在表的名称,字段名指需要修改的字段,数据类型指修改后字段的新数据类型。

eg.修改name_cp的数据类型varchar(50)

mysql> ALTER TABLEtest_tbl-> MODIFY name_cp varchar(50);

Query OK,0 rows affected (0.01sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| name | varchar(20) | YES | | NULL | |

| name_cp | varchar(50) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| sex | tinyint(4) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

5 rows in set (0.00 sec)

删除字段:

ALTER TABLE DROP ;

其中,字段名指需要从表中删除的字段的名称。

eg.删除sex字段

mysql> ALTER TABLEtest_tbl-> DROPsex;

Query OK,0 rows affected (0.02sec)

Records:0 Duplicates: 0 Warnings: 0mysql> desctest_tbl;+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| names | varchar(20) | YES | | NULL | |

| name_cp | varchar(50) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

+---------+-------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

修改表名:

ALTER TABLE RENAME [TO] ;

其中,TO 为可选参数,使用与否均不影响结果。

eg.修改表名test_tbl改为test_tb;

mysql> ALTER TABLEtest_tbl-> RENAME TOtest_tb;

Query OK,0 rows affected (0.02sec)

mysql>show tables;+----------------+

| Tables_in_test |

+----------------+

| board |

| data |

| test_tb |

| test_tbl_cp |

+----------------+

4 rows in set (0.00 sec)

(4)D(Delete)删除表

DROP TABLE [IF EXISTS] 表名1 [,表名2, 表名3 ...]对语法格式的说明如下:

表名1, 表名2, 表名3 ...表示要被删除的数据表的名称。DROP TABLE可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。IF EXISTS 用于在删除数据表之前判断该表是否存在。如果不加 IF EXISTS,当数据表不存在时 MySQL 将提示错误,中断 SQL 语句的执行;加上 IF EXISTS 后,当数据表不存在时 SQL 语句可以顺利执行,但是会发出警告(warning)。

两点注意:

用户必须拥有执行 DROP TABLE 命令的权限,否则数据表不会被删除。

表被删除时,用户在该表上的权限不会自动删除。

eg.删除表test_tbl_cp

mysql> DROP TABLEtest_tbl_cp;

Query OK,0 rows affected (0.01sec)

mysql>show tables;+----------------+

| Tables_in_test |

+----------------+

| board |

| data |

| test_tb |

+----------------+

3 rows in set (0.00 sec)

mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)相关推荐

  1. mysql中值换行显示为乱码_MySQL数据移植中的乱码问题

    mysql移植含有中文的数据时,很容易出现乱码问题.很多是在从mysql4.x向mysql5.x移植的时候出现.mysql的缺省字符集是latin1,在使用mysql4.x的时候,很多人都是用的lat ...

  2. Mysql中查询连续一段时间内统计数据

    Mysql中查询连续一段时间内统计数据 在一次生产环境中遇到统计当前日期的前10天每天的订单量,一开始想到的就是根据日期进行分组统计,但在查询的时候会存在一个问题:有可能某一天没有订单交易,日期分组中 ...

  3. mysql数据控制语言_Mysql数据控制语言DCL(Data Control Language)

    1.Mysql中的用户管理: Mysql中的用户,存储在系统数据库mysql中的user表中,表初始内容只有localhost-----root用户. 创建用户: Create user '用户名'@ ...

  4. 数据库mysql中对于drop_数据库之删除表数据drop、truncate和delete的用法

    数据库中删除表数据的关键字,最常用的可能就是delete了,另外其实还有drop和truncate两个关键字. 老大:drop 命令格式:drop table  tb  ---tb表示数据表的名字,下 ...

  5. MySql 中 一次update更新多条数据

    我最近遇到一个导入Excel表中数据到数据库的需求,数据量一万多条.需先查询数据库中是否存在要插入的数据,若存在则更新数据,否则插入数据.我首先按照常规思路先查询,然后插入或更新.然而nginx返回 ...

  6. MySQL中一个B+树能存储多少数据

    MySQL聚簇索引的存储结构 MySQL中InnoDB页的大小默认是16k.也可以自己进行设置.(计算机在存储数据的时候,最小存储单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如 XFS/ ...

  7. mysql中创建唯一索引的关键字_mysql中唯一索引的关键字是什么

    mysql中唯一索引的关键字是unique index.创建唯一索引可以避免数据出现重复.唯一索引可以有多个,但索引列的值必须唯一,索引列的值允许有空值.创建唯一索引可以使用关键字UNIQUE随表一同 ...

  8. MySQL中引入存储引擎意义是_mysql学习九:存储引擎、存储过程和函数的引入

    存储引擎: 存储引擎是mysql特有的,共有7种,常用的有myisam.memory.innodb 查看表的存储引擎: show create table 表名; 修改表的存储引擎: alter ta ...

  9. mysql中gbk编码汉字和英文_MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题...

    MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数 ...

最新文章

  1. python环境搭建需要装几个软件_python的发展前景及python环境搭建
  2. 手语识别 机器学习_机器学习入门实践,让机器识别一只猫
  3. Interview:互联网IT界技能进阶必备—各个职位推荐几个高含金量的证书
  4. Python3算法基础练习:编程100例( 21~ 25)
  5. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.2——使用Android Testing Support Library进行测试...
  6. linux下批量查找UTF-8的BOM文件,并去除BOM
  7. 图书管理系统软件测试报告_软件测试新手入门小知识点,一定要牢记
  8. UTrust4701F双界面NFC读写器读卡器测试软件读写NFC电子标签的文本|网址|电子名片|智能海报|蓝牙地址内容操作说明
  9. CSDN论坛--提问的智慧
  10. 游戏开发bug解决思路
  11. mysql error 1114_ERROR 1114 (HY000): The table 'test1' is full 的解决
  12. 运用贝塞尔曲线绘制笔锋效果
  13. 【CRM】CRM开发中常用表
  14. PayPal账户遭大规模冻结!跨境卖家如何自救?
  15. 输入虚拟手机服务器地址,输入服务器url地址
  16. JPEG 标准推荐的亮度、色度DC、AC Huffman 编码表
  17. 钉钉企业内部开发工具配置
  18. 中国移动打造“移动信息专家”
  19. SAP-ABAON 无客户的资产变卖收现
  20. asp.net(vb)与sql的连接(代码写在web.config中的)

热门文章

  1. [渝粤教育] 西北大学 数据结构 参考 资料
  2. [渝粤教育] 中国地质大学 信息资源管理 复习题 (2)
  3. 【渝粤教育】广东开放大学 国际金融 形成性考核 (48)
  4. SI4463模块配合WDS的快速上手指南
  5. java 正则表达式 替换括号,Java正则表达式:如何替换方括号内的所有字符?
  6. employee.java,Java基础系列(六):对象与类(上)
  7. mysql字段编码转换_mysql字符集编码转换
  8. lda进行图片分类_LDA主题模型
  9. 数组中查找並返回数组_java数组查找常见情况
  10. django定时任务