您的位置:首页 > 数据库 > MySQL

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;


数据类型

整型



浮点型



日期时间类型



日期和时间数据类型

类型取值范围说明
DATE1000-01-01 9999-12-31日期,格式YYYY-MM-DD
TIME-838:58:59 835:59:59时间,格式HH:MM:SS
DATETIME1000-01-01 00:00:00 9999-12-31 23:59:59日期和时间,格式YYYY-MM-DD HH:MM:SS
TIMESTAMP1970-01-01 00:00:00 2037年的某个时间时间标签,在处理报告时使用显示格式取决于M的值
YEAR1901-2155年份可指定两位数字和四位数字的格式

字符型



TEXT类型适合存储长文本,BLOB类型适合存储二进制数据,支持任何数据,例如文本,声音和图像等。

数据表操作

创建数据表



例如创建一个名为
TB1
的数据表

CREATE TABLE TB1 (
username VARCHAR(20),
age TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED
);


UNSIGNED
属性就是将数字类型无符号化

在MYSQL中整型范围:

类型大小范围(有符号)范围(无符号) 用途
TINYINT1 字节(-128,127)(0,255) 小整数值
SMALLINT2 字节(-32 768,32 767)(0,65 535) 大整数值
MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215) 大整数值
INT或INTEGER4 字节(-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