MySQL中的DDL
数据库
数据库(Database),简称DB。是长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”。用来保存、管理数据。用数据库保存数据的优点在于它能够确保数据的准确性(一致性和完整性),并且能降低数据的冗余。
数据库可以分为:
1.关系型数据库(SQL)。把数据存在各个表中,表之间建立关系,可以操作不同表的数据(只能放在一个服务器上)。
包括MySQL、Oracle、SQL Server、SQLite、DB2
2.非关系型数据库(NOSQL)。表之间独立,数据可分散在不同的数据库中,大量数据写入可以分散压力。
包括Redis、MongeDB
其中MySQL和Redis都是用的比较多的。
DBMS
数据库管理系统(Database Management System)
数据管理软件,科学组织和存储数据、高效地获取和维护数据。每一个数据库软件,都有一套数据库管理系统。
MySQL
是现流行的开源、免费的关系型数据库
特点:
1.免费、开源数据库
2.小巧、功能齐全
3.使用便捷
4.可运行于Windows或Linux操作系统
5.可适用于中小型甚至大型网站应用
MySQL的运行机制
各种语言的接口通过连接池与MySQL的接口连接。
DOS命令连接及使用数据库
1.开启/关闭mysql服务
net start mysql/ net stop mysql
2.登录命令:
mysql -h 服务器主机地址 -u用户名 -p用户密码
3.显示数据库:
show databases;
4.显示版本信息:
select version();
5.切换到指定数据库:
use **;
6.显示数据库中的表:
show tables;
7.查询指定表中的信息
select * from user \G;
8.更改root用户的密码:
update user set password=password(‘XXXX’) where user =‘root’;
9.刷新:
flush privileges;
10.退出:
exit;
11.寻求帮助:
?
SQLyog管理工具
除了DOS命令外,还可以使用SQLyog管理工具,是可手动操作、管理MySQL数据库的软件工具。
特点:
1.易用
2.简洁
3.图形化
结构化查询语句SQL
数据库中用到的命令语句可以分为4类,分别为DDL、DML、DQL、DCL。
命令行操作数据库
1.创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名;
2.删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
3.查看数据库
SHOW DATABASES;
4.使用数据库
USE 数据库名;
5.查看数据库的定义
SHOW CREATE DATABASE 数据库名;
创建数据表
1.显示表结构
DESC 表名;
2.查看数据表的定义
SHOW CREATE TABLE 表名;
3.设置严格检查模式
SET sql_mode =strict_trans_tables
;
4.创建数据表
CREATE TABLE [IF NOT EXISTS] `表名`(
`字段名1` 列类型 [属性] [索引] [注释],
`字段名2` 列类型 [属性] [索引] [注释]
)[表类型] [表字符集] [注释];
其中表名和字段名用的是反引号,用以区别MySQL关键字和普通字符而引入。
5.删除数据表
DROP TABLE [IF EXISTS] 表名;
6.修改数据表
修改表名
ALTER TABLE 旧表名 RENAME AS 新表名;
列类型
规定了数据表中该列存放的数据类型。
分为:
1、数值类型
2、字符串类型
3、日期和时间型数值类型
4、NULL值
1.数值类型
通常用的比较多的为tinyint、int和double。如果需要存放年龄之类的比较小的数据,用tinyint即可,其他通常用的比较多的为int类型。decimal类型通常用于表示货币。
2.字符串类型
字符串类型如果储存的数据内容较少,用的比较多的是char和varchar两种类型,这两种类型的区别在于如果字符数没达到最大长度,char依然是占用了最大长度的字符,而varchar是可以变化长度的,会自动去掉空余的长度。而text为长文本类型,可以用来储存合同内容等数据。另外还有blob类型,可以用来存声音图像、网页、文档。
3.日期和时间型数值类型
日期和时间型数值类型通常DATETIME类型就能够契合我们的要求。
4.NULL值
可以理解为”没有值“或者”未知值“。
不要用NULL进行算数运算,结果仍为NULL。
数据字段属性
常用的数据字段属性列举5种:
1.UNSIGNED
无符号的。声明该数据列不允许负数。
2.ZEROFILL
0填充的。不足位数的用0来填充,如int(3),输入5则显示为005。
3.AUTO_INCREMENT
自动增长的,每添加一条数据,自动在上一个记录数上加1
通常用于设置主键,且为整数类型
可定义起始值和步长(默认初始值为1,步长为1)
改变自增列的初始值和步长
CREATE TABLE tab1(
ID INT(4) PRIMARY KEY AUTO_INCREMENT
)AUTO_INCREMENT=100; #设置起始值为100,只影响当前表的初始值
SET @@ auto_increment_increment=5; #设置步长为5,影响所有使用自增列的表
4.NULL和NOT NULL
默认为NULL,即没有插入该列的数值
如果设置为NOT NULL,则该列必须有值
5.DEFAULT
默认的。用于设置默认值。
如性别字段,默认为"男",否则为"女";若无指定该列的值,则默认为"男"的值。
数据字段注释
CREATE TABLE IF NOT EXISTS `test`(
`id` int(11) UNSIGNED COMMENT '编码号'
)COMMENT='测试表';
如果是字段列属性后面加注释,用COMMENT后面加’注释内容‘即可,若在表后加表注释,语法格式为COMMENT=‘注释内容’;
COMMENT关键字修饰的注释是可以随数据存进数据库被读取到的。而如果使用#的单行注释,以及/**/多行注释,只能在代码文件里看到,不能随数据存进数据库。
表类型
MySQL的数据表的类型主要包括:MyISAM、InnoDB、HEAP、BOB、CSV等。其中比较常用的有MyISAM、InnoDB两种。
MyISAM和InnoDB的主要区别如下图:
MyISAM主要用于节约空间及相应速度,而InnoDB主要用于安全性,事务处理及多用户操作数据表。即MyISAM适合查询快捷,而InnoDB适合增删改查数据。
CREATE TABLE `表名`(
#省略一些代码
)ENGINE=InnoDB;
设置数据表字符集
可为数据库、数据表、数据列设定不同的字符集。在创建时通过命令来设置,如:
CREATE TABLE `表名`(
#省略一些代码
)CHARSET = utf8;
如无设定,则根据MySQL数据库配置文件my.ini中的参数设定。
修改数据表
需要用到ALTER关键字
1.修改表名
ALTER TABLE 旧表名 RENAME AS 新表名;
2.添加字段
ALTER TABLE 表名 ADD 字段名 列类型 [属性];
3.修改字段
ALTER TABLE 表名 MODIFY 字段名 列类型 [属性];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列类型 [属性];
4.删除字段
ALTER TABLE 表名 DROP 字段名;
主键
唯一区分数据与别的数据不一样的列数据.主键字段必须非空,不重复,一个表里只能有一个主键,也可以没有主键
如学号,身份证号等字段可以作为主键
主键字段用PRIMARY KEY表示
外键
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。
一个表里的外键可以有一个,也可以有多个
主-外键关系的表之间,有主键的表叫主表,有外键的表叫子表(从表)
外键引用的数据一定在主键范围内,确保了数据的安全性
外键字段用FOREIGN KEY表示
外键有两种创建方式:
(1)建表时指定外键约束
CREATE TABLE student(
#省略内容
CONSTRAINT FK_外键名 FOREIGN KEY (外键字段名) REFERENCES 主表名(主键字段名)
);
(2)建表后修改字段
ALTER TABLE student ADD CONSTRAINT FK_外键名 FOREIGN KEY (外键字段名) REFERENCES 主表名(主键字段名)
删除外键
语法:
ALTER TABLE student DROP FOREIGN KEY FK_外键名
ALTER TABLE student DROP INDEX FK_外键名 (删除索引)
删除具有主外键关系的表时,要先删子表,后删主表