mysql数据表基本操作_MYSQL-数据库及数据表基本操作

1.数据库操作

创建数据库:

CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name

如 CREATE DATABASE t1

[IF NOT EXISTS]:如果库已经存在,就不会返回错误

显示数据库编码方式:

SHOW CREATE DATABASE t1

指定编码方式:

CREATE DATABASE IF NOT EXIST t2 CHARACTER SET=gbk

修改数据库:

ALTER {DATABASE|SCHEMA} db_name

如ALTER DATABASE t2 CHARACTER SET=utf8

查看当前服务器下的数据库列表:

SHOW {DATABASE|SCHEMAS}

如 SHOW DATABASES

查看当前打开的数据库

SELECT DATABASE();

删除数据库:

DROP {DATABASE|SCHEMA} [IF EXISTS] db_name

2.数据表

USE 数据库名称

创建数据表:

CREATE TABLE [IF NOT EXISTS] table_name (column_name data_type,…)

如:

CREATE TABLE tb1(

username VARCHAR(20),

age TINYINT UNSIGNED,

salary FLOAT(8,2) UNSIGNED

);

查看数据库列表:

SHOW TABLES [FROM db_name]

查看数据表结构:

SHOW COLUMNS FROMtb_name

插入记录:

INSERT [INTO] tb_name [(col_name,…)] VALUES(val,…)

如:

INSERT tb1 VALUES(‘Tom‘,25,7863.25);//必须匹配

INSERT tb1 (username,salary) VALUES(‘Tom‘,7863.25);

记录查找:

SELECT expr,… FROM tb_name

如:

SELECT *FROM tb1;//*为字段过滤

空值NULL与非空NOT NULL:

如:

CREATE TABLE tb2(

username VARCHAR(20) NOT NULL,

age TINYINT UNSIGNED NULL

);

自动编号:

AUTO_INCREMENT:必须与主键组合使用,默认情况下,起始值为1,每次增量为1

主键:

PRIMARY KEY:自动为NOT NULL 不一定和AUTO_INCREMENT一起使用 值唯一不许重复

CREATE TABLE tb3(

id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(20) NOT NULL

);

CREATE TABLE tb4(

id SMALLINT UNSIGNED PRIMARY KEY,

username VARCHAR(20) NOT NULL

);

唯一约束:

UNIQUE KEY:可以保证记录的唯一性,字段可以为NULL。每张数据表可以存在多个唯一约束

CREATE TABLE tb5(

id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(20) NOT NULL UNIQUE KEY,

age TINYINT UNSIGNED

);

默认约束:

DEFAULT:插入记录时如果没有明确为其赋值,则自动赋予默认值

CREATE TABLE tb5(

id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(20) NOT NULL UNIQUE KEY,

sex ENUM(‘1‘,‘2‘,‘3‘) DEFAULT ‘3‘

);

外键约束:

FOREIGN KEY p:保持数据一致性和完整性,实现一对一或一对多关系

要求:

注:子表是具有外键列的表,子表参照的表叫父表

20180110223844473267.jpg

编辑数据表的默认存储引擎(配置):

default-set-engine=INNODB

CREATE TABLE provinces( //父表

id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

pname VARCHAR(20) NOT NULL

);

CREATE TABLE users( //子带

id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(20) NOT NULL,

pid SMALLINT UNSIGNED,//注意数据类型必须一致

FOREIGN KEY(pid) REFERENCES provinces (id)

);

20180110223844475220.jpg

如:

FOREIGN KEY (pid) PREFERENCES provinces (id) ON DELETE CASCADE,

INSERT provinces(pname) VALUES(‘A‘);

INSERT provinces(pname) VALUES(‘B‘);

INSERT provinces(pname) VALUES(‘C‘);

INSERT users1(username,pid) VALUES(‘Tom‘,1);

INSERT users1(username,pid) VALUES(‘Jerry‘,2);

INSERT users1(username,pid) VALUES(‘Lucy‘,3);

当删除provinces中的id=3的数据C时,相应的users1中的Lucy也会被删掉,更新的话同样如此;

实际开发中,我们很少使用物理的外键约束,而是使用逻辑约束;物理的外键约束只有innoDB这种存储引擎才会支持,MYISAM这种引擎就不支持物理的外键约束。反过来说,当我们使用到的引擎为MYISAM时,只能使用逻辑外键(即两个表的设计的逻辑关系)。

20180110223844486939.jpg

在实际开发中,用列级约束比较多,表级约束很少用,除此之外,在所有的约束中,并不是说每种约束都存在着表级或列级约束,其中,NOT NULL 非空约束,DEFAULT约束这两种约束就不存在表级约束,它们只有列级约束,而对于其他的三种,像主键,唯一,外键,它们都可以存在表级和列级约束。

3.修改数据表

添加单列:

ALTER TABLE tb_name ADD [column] col_name column_definition [FIRST|AFTER col_name];

添加多列:

ALTER TABLE tb_name ADD (col_name data_type ,...);

删除单列:

ALTER TABLE tb_name DROP col_name;

删除多列:

ALTER TABLE tb_name DROP col_name,DROP ....;

复合增减列:

ALTER TABLE tb_name ADD col_name data_type [FIRST|AFTER col_name],DROP col_name;

ALTER TABLE tb_name ADD (col_name data_type ,...),DROP col_name,DROP ...;

添加主键约束

ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] PRIMARY KEY(index_col_name);

添加唯一约束

ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY](index_col_name,...);

添加外键约束

ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] FOREIGN KEY(index_col_name,...) REFERENCES db_name(col_name);

添加或删除默认约束

ALTER TABLE tb_name ADD col_name {SET DEFAULT literal | DROP DEFAULT};

删除主键约束

ALTER TABLE tb_name DROP PRIMARY KEY;

删除唯一约束

ALTER TABLE tb_name DROP {INDEX | KEY} index;;//用命令SHOW INDEXES FROM tb_name (表名称)\G;查看唯一约束的列名称。另外这里的index也可以用来直接删除索引

删除外键约束

ALTER TABLE tb_name DROP FOREIGN KEY fk_name;//用SHOW CREATE TABLE users2;查看外键约束的名称,由CONSTRAINT [symbol]定义

修改列定义

ALTER TABLE tb_name MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;//修改id字段的数据类型和在表users2中所处的位置

修改列名称

ALTER TABLE tb_name CHANGE pid(旧的字段名称) p_id(新的字段名称) TINYINT UNSIGNED NOT NULL;//修改pid字段,改为p_id字段

数据表更名

ALTER TABLE tb_name1 RENAME tb_name2;//把表名users2改为新的users3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值