数据库操作

结构化查询语句分类

名称 解释 命令
DDL (数据定义语言) 定义管理数据对象,如数据库和表 create drop alter
DML (数据操作语言) 用于操作数据库对象中的所包含的数据 insert update delete
DQL(数据库查询语言) 用户查询数据库 select
DCL (数据控制语言) 用于管理数据库的语言,包含权限,数据更改 grant commit rollback

数据库操作

1. 命令行操作数据库

  1. 创建数据库 : create database [if not exists] 数据库名;
  2. 删除数据库 : drop database [if exists] 数据库名;
  3. 查看数据库 : show databases;
  4. 使用数据库 : use 数据库名;

注:也可以用 客户端连接工具操作

2.创建数据表

属于DDL的一种,语法 :

  1. create table [if not exists] `表名`(
  2. '字段名1' 列类型 [属性][索引][注释],
  3. '字段名2' 列类型 [属性][索引][注释],
  4. #...
  5. '字段名n' 列类型 [属性][索引][注释]
  6. )[表类型][表字符集][注释];

说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键).

3.数据值和列类型

列类型 : 规定数据库中该列存放的数据类型

3.1数值类型

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 byte (-128,127) (0,255) 小整数值
SMALLINT 2 bytes (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 bytes (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
浮点数值
DOUBLE 8 bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

3.2日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个”零”值,当指定不合法的MySQL不能表示的值时使用”零”值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型 大小
( bytes)
范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
YYYYMMDD HHMMSS 混合日期和时间值,时间戳

3.3字符串类型


字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型

类型 大小 用途
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据

4.数据字段属性

UnSigned

  • 无符号的
  • 声明该数据列不允许负数 .

ZEROFILL

  • 0填充的
  • 不足位数的用0来填充 , 如int(3),5则为005

Auto_InCrement

  • 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认)
  • 通常用于设置主键 , 且为整数类型
  • 可定义起始值和步长
    • 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表
    • SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)

NULL 和 NOT NULL

  • 默认为NULL , 即没有插入该列的数值
  • 如果设置为NOT NULL , 则该列必须有值

DEFAULT

  • 默认的
  • 用于设置默认值
  • 例如,性别字段,默认为”男” , 否则为 “女” ; 若无指定该列的值 , 则默认值为”男”的值

练习:
— 目标 : 创建一个school数据库
— 创建学生表(列,字段)
— 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email
— 创建表之前 , 一定要先选择数据库

  1. CREATE TABLE IF NOT EXISTS `student` (
  2. `id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
  3. `name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
  4. `pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
  5. `sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别',
  6. `birthday` datetime DEFAULT NULL COMMENT '生日',
  7. `address` varchar(100) DEFAULT NULL COMMENT '地址',
  8. `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  11. -- 查看数据库的定义
  12. SHOW CREATE DATABASE school;
  13. -- 查看数据表的定义
  14. SHOW CREATE TABLE student;
  15. -- 显示表结构
  16. DESC student;

数据表的类型

1.设置数据表的类型

  1. CREATE TABLE 表名(
  2. -- 省略一些代码
  3. -- Mysql注释
  4. -- 1. # 单行注释
  5. -- 2. /*...*/ 多行注释
  6. )ENGINE = MyISAM (or InnoDB)
  7. -- 查看mysql所支持的引擎类型 (表类型)
  8. SHOW ENGINES;


MySQL的数据表的类型(也叫存储引擎) : MyISAM , InnoDB , HEAP , BOB , CSV等…

常见的 MyISAM 与 InnoDB 类型:

名称 MyISAM InnoDB
事务处理 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间 较小

经验 ( 适用场合 ) :

  • 适用 MyISAM : 节约空间及相应速度
  • 适用 InnoDB : 安全性 , 事务处理及多用户操作数据表

2.数据表的存储位置

  • MySQL数据表以文件方式存放在磁盘中
    • 包括表文件 , 数据文件 , 以及数据库的选项文件
    • 位置 : Mysql安装目录\data\下存放数据表 . 目录名对应数据库名 , 该目录下文件名对应数据表 .
  • 注意 :
      • . frm — 表结构定义文件
      • . MYD — 数据文件 ( data )
      • . MYI — 索引文件 ( index )
    • InnoDB类型数据表只有一个 *.frm文件 , 以及上一级目录的ibdata1文件
    • MyISAM类型数据表对应三个文件 :

3.设置数据表字符集

我们可为数据库,数据表,数据列设定不同的字符集,设定方法 :

  • 创建时通过命令来设置 , 如 : CREATE TABLE 表名()CHARSET = utf8;
  • 如无设定 , 则根据MySQL数据库配置文件 my.ini 中的参数设定

修改数据库

1.修改表 ( ALTER TABLE )

  1. 修改表名 : ALTER TABLE 旧表名 RENAME AS 新表名
  2. 添加字段 : ALTER TABLE 表名 ADD字段名 列属性[属性]
  3. 修改字段 :
  4. ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
  5. ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
  6. 删除字段 : ALTER TABLE 表名 DROP 字段名


2.删除数据表

  1. 语法:DROP TABLE [IF EXISTS] 表名
  2. IF EXISTS为可选 , 判断是否存在该数据表
  3. 如删除不存在的数据表会抛出错误

案例:

  1. CREATE table user_register_info (
  2. -- 字段
  3. mobile VARCHAR(11) not null COMMENT '手机号',
  4. user_name VARCHAR(200) not null COMMENT '用户名',
  5. sex char(1) not null COMMENT '性别',
  6. `password` VARCHAR(20) not null COMMENT '密码',
  7. `confirm_password` VARCHAR(20) not null COMMENT '确认密码',
  8. `question` VARCHAR(20) not null COMMENT '问题',
  9. `answer` VARCHAR(20) not null COMMENT '答案',
  10. `real_name` VARCHAR(20) not null COMMENT '真实姓名',
  11. `birthday` TIMESTAMP not null COMMENT '生日',
  12. `email` VARCHAR(20) not null COMMENT '邮箱'
  13. );
  14. -- 修改表名
  15. ALTER TABLE user_register_info RENAME as user_ticket_info;
  16. -- 删掉性别列
  17. ALTER TABLE user_ticket_info drop sex;
  18. -- 添加性别列
  19. ALTER TABLE user_ticket_info ADD sex char(1) not null COMMENT '性别';
  20. -- 修改手机长度为12
  21. ALTER TABLE user_ticket_info MODIFY mobile VARCHAR(20) not null COMMENT '手机号';
  22. -- 修改手机字段名,长度为12
  23. ALTER TABLE user_ticket_info CHANGE mobile user_mobile VARCHAR(11) not null COMMENT '手机号';
  24. -- 删掉数据表
  25. drop table if EXISTS user_info;