MySQL-数据表操作
2016-07-27 17:56
363 查看
MySQL-数据表操作
注释
单行注释--Select all: SELECT * FROM Customers;
或者
SELECT * FROM Customers -- WHERE City='Berlin';
多行注释:
/*Select all the columns of all the records in the Customers table:*/ SELECT * FROM Customers;
或者忽略行中的一部分
SELECT CustomerName, /*City,*/ Country FROM Customers;
数据类型
整型
浮点型
日期时间类型
日期和时间数据类型
类型 | 取值范围 | 说明 |
---|---|---|
DATE | 1000-01-01 9999-12-31 | 日期,格式YYYY-MM-DD |
TIME | -838:58:59 835:59:59 | 时间,格式HH:MM:SS |
DATETIME | 1000-01-01 00:00:00 9999-12-31 23:59:59 | 日期和时间,格式YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 1970-01-01 00:00:00 2037年的某个时间 | 时间标签,在处理报告时使用显示格式取决于M的值 |
YEAR | 1901-2155 | 年份可指定两位数字和四位数字的格式 |
字符型
TEXT类型适合存储长文本,BLOB类型适合存储二进制数据,支持任何数据,例如文本,声音和图像等。
数据表操作
创建数据表例如创建一个名为
TB1的数据表
CREATE TABLE TB1 ( username VARCHAR(20), age TINYINT UNSIGNED, salary FLOAT(8,2) UNSIGNED );
UNSIGNED属性就是将数字类型无符号化
在MYSQL中整型范围:
类型 | 大小 | 范围(有符号) | 范围(无符号) 用途 |
---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) 大整数值 |
查看数据表结构
SHOW COLUMNS FROM tbl_name;
插入记录
列名称可以省略,如果省略,则必须为每一列赋值。
INSERT tb1 VALUES('Tom', 25, 8888.88);
记录查找
约束
空值与非空NULL字段值可以为空,
NOT NULL字段值禁止为空
AUTO_INCREMENT
自动编号,且必须与主键组合使用。默认情况下,其实值为1,每次增量为1。
PRIMARY KEY 主键自动为
NOT NULL
UNIQUE KEY 唯一约束,唯一约束可以保证记录的唯一性,唯一约束的字段可以为空值(NULL),每张数据表可以存在多个唯一约束。
DEFAULT默认值, 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
create table tb6( id smallint unsigned auto_increment primary key, username varchar(20) not null unique key, sex enum('1', '2', '3') default '3' );
外键约束
保证数据的一致性,完整性,实现一对一或一对多关系。外键约束的要求
父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
数据表的存储引擎只能为InnoDB。
外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号必须相同;而字符的长度则可以不同。
外键列和参照列必须创建索引。如果外键不存在索引的话,MySQL将自动创建索引。
例子:
创建一个
province省份表:
create table province( id smallint unsigned primary key auto_increment, pname varchar(20) not null );
创建一个用户表users,其中有一列pid对应的为省份,为外键列:
create table users( id smallint unsigned primary key auto_increment, username varchar(10) not null, pid smallint unsigned, foreign key (pid) references province (id) );
查看
province表的存储引擎
show create table province;,结果如下
CREATE TABLE `province` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `pname` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
外键约束的参照操作
CASCADE: 从父表删除或更新且自动删除或跟新子表中匹配的行
SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL。
RESTRICT: 拒绝对父表的删除或更新操作。
NO ACTION: 标准SQL的关键字,在MySQL中与RESTRICT相同。
更改上面创建的users表如下:
create table users( id smallint unsigned primary key auto_increment, username varchar(10) not null, pid smallint unsigned, foreign key (pid) references province (id) on delete cascade );
当删除province表中数据时,对应的users表中的数据也对应会删除。
表级约束与列级约束
对一个数据列建立的约束,称为列级约束。
对多个数据列建立的约束,称为表级约束。
列级约束既可以在列定义时声明,也可以在列定义后声明。
表级约束只能在列定以后声明。
数据表修改
添加单列ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]
FIRST表示插入在所有列的最前面。
给
users表添加
age字段
alter table users add age tinyint unsigned not null default 10;
添加多列
ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition)
删除列
ALTER TABLE tbl_name DROP [COLUMN] col_name
添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name, ...)
例如给
users2表的
id字段添加主键约束:
alter table users2 add constraint pk_user2_id primary key (id);
添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)
例如给
users2表的
username字段添加唯一约束:
alter table users2 add unique (username);
添加外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ....) reference_definition
例如给
users2表的
pid字段添加外键约束:
alter table users2 add foreign key (pid) references province (id);
添加/删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY;
删除唯一约束
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name;
删除外键约束
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
修改列定义
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST|AFTER col_name]
修改列名称
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
数据表更名
方法1
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
方法2
RENAME TABLE tbl_name TO new_tbl_name [, tbl_name TO new_tbl_name2] ...
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜