mysql 数据库CRUD

2019-08-28 鲁鲁槟 收藏

一、数据库操作

①、创建

CREATE DATABASE t1;
CREATE DATABASE IF NOT EXISTS t1;
CREATE DATABASE t2 CHARACTER SET gbk;

②、更新

ALTER DATABASE t2 CHARACTER SET utf8;

③、查看

SHOW CREATE DATABASE t2;
SHOW DATABASES;

④、删除

DROP DATABASE t1;

二、数据类型

①、定义

数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。

②、整形

③、数据类型之浮点型

④、数据类型之日期时间型

⑤、数据类型之字符型

⑥、mysql 中 char、varchar、text 的区别

A、char的总结:

char 最大长度是 255 字符,注意是字符数和字符集没关系。可以有默认值,尾部有空格会被截断。

B、varchar的总结:

varchar 的最大长度 65535 是指能存储的字节数,其实最多只能存储 65532 个字节,还有 3 个字节用于存储长度。
注意是字节数这个和字符集有关系。一个汉字字符用 utf8 占用 3 字节,用 gbk 占用 2 字节。可以有默认值,尾部有空格不会截断。

C、text的总结:

text 和 varchar 基本相同。text 会忽略指定的大小这和 varchar 有所不同,text 不能有默认值。尾部有空格不会被截断。
text 使用额外的 2 个字节来存储数据的大小,varchar 根据存储数据的大小选择用几个字节来存储。
text 的 65535 字节全部用来存储数据,varchar 则会占用 1-3 个字节去存储数据大小。

三、创建数据库

①、创建

USE test;
SELECT DATABASE();
SHOW TABLES;
SHOW TABLES FROM mysq1;
CREATE TABLE tb1( 
    id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20) NOT NULL UNIQUE KEY DEFAULT '',
    age TINYINT UNSIGNED,
    salary FLOAT(8,2) UNSIGNED NULL
)ENGINE=InnoDB;
SHOW COLUMNS FROM tb1; //查看数据表结构

②、约束

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

  • 默认约束:DEFAULT

  • 主键约束:PRIMARY KEY

  • 非空约束:NOT NULL

  • 外键约束:FOREIGN KEY,1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。2.数据表的存储引擎只能为InnoDB。3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。

CREATE TABLE provinces( 
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
    pname VARCHAR(20) NOT NULL
);
CREATE ABLE users(
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(10)NOT NULL,
    FOREIGN KEY(pid)REFERENCES provinces (id) ON DELETE CASCADE
);
SHOW INDEXES FROM provinces \G;
  • 1.CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行

  • 2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL

  • 3.RESTRICT:拒绝对父表的删除或更新操作。

  • 4.NOACTION:标准SQL的关键字,在MySQL中与RESTRICT相同

③、utf8_general_ci/cs、utf8_unicode_ci、utf8_bin

utf8_general_cs:区分大小写(cs:case sensitiveci 大小写敏感)

utf8_general_ci:不区分大小写,校对快、准确度差(ci:case insenstive 大小写不敏感)

utf8_unicode_ci:不区分大小写,校对慢、准确度高

utf8_bin:区分大小写,可存储二进制内容

四、表级约束与列级约束

①、定义

  • 对一个数据列建立的约束,称为列级约束.对多个数据列建立的约束,称为表级约束

  • 列级约束既可以在列定义时声明,也可以在列定义后声明

  • 表级约束只能在列定义后声明

②、进一步解释

  • NOT NULL、DEFAULT只有列级约束

  • PRIMARY KEY 、UNIQUE KEY、UNIQUE KEY有表级和列级约束

  • CHECK检测约束不起作用,mysql手册里写的很清楚:“所有的存储引擎均对CHECK子句进行分析,但是忽略CHECK子句。”

五、修改数据表

①、添加/删除列

ALTER TABLE users1 ADD aQe TINYINT UNSIGNED NOT NULL DEFAULT 10 AFTER username:
ALTER TABLE users1 DROP age;
ALTER TABLE users1 DROP hobby,DROP password;
删除一列的同时在新增一列也是可以的!只需要用都逗号间隔

②、添加约束

ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY (id); //添加主键约束
ALTER TABLE users2 ADD UNIQUE KEY (username); //添加唯一约束
ALTER TABLE users2 ADD FOREIGN KEY (pid) REFERENCES provinces (id); //添加外键约束
ALTER TABLE users2 ALTER age SET DEFAULT 15; //添加默认约束

③、删除约束

ALTER TABLE users2 DROP PRIMARY KEY; //删除主键约束
ALTER TABLE users2 DROP INDEX username; //删除唯一约束
ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1; //删除外键约束
ALTER TABLE users2 ALTER age DROP DEFAULT; //删除默认约束

④、修改列定义和更名数据表

ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST; //修改列的定义 
ALTER TABLE users2 RENAME users3; //修改列名称
RENAME TABLE users3 TO users2; //数据表更名


暂时还没有评论,快来抢沙发吧~

发表评论

您需要登录后才可以评论。登录 | 立即注册
阅读 115