MySQL学习笔记
0.在Windows下,命令行输入mysql,进入命令行模式(开头是mysql>)。MySQL每条语句以;结尾。
1.MariaDB完全支持MySQL,是开源版本。
2.MySQL具有日志记录功能。错误日志、二进制日志(包括各种操作)、更新日志、
查询日志(记录所有的查询功能)、慢查询日志(记录比较慢的查询内容)
3.MySQL分为SQL Layer层和Storage Engine Layer层。每一部分又分为若干模块,负责专门功能(如网络交互、用户模块、访问控制、连接管理、线程管理、查询解析、查询优化、变更管理、日志记录、复制模块、存储引擎接口)
4.存储引擎:用于存储管理。不同存储引擎在性能上各有利弊。可以用show engines命令查看所有存储引擎。MySQL必须选择一种存储引擎。可以修改存储引擎。常见的存储引擎:
InnoDB存储引擎:用于事务处理应用程序,支持外键,支持崩溃修复能力和并发控制。
MyISAM存储引擎:插入数据快,空间、内存使用效率低。
Memory存储引擎:数据存到内存里,访问快,安全性低。
5.数据类型:
整数(有符号、无符号),浮点,字符串(不同类型字符串最大长度不同),时间日期, 集合类
型。
集合类型:
(1)enum类型:只允许在集合中取得一个值,其作用类似与单选。enum类型可以从集合中取得一个值或使用NULL值。除此之外的输入将会使MySQL在这个字段中插入一个空字符串。如果大小写不匹配,MySQL会自动进行大小写匹配。
enum从1开始作为数字索引,最多可以包含65536个元素,错误值用0或一个空字符串表示。
例子:
mysql> CREATE TABLE t(
- > user varchar(20),
- > sex ENUM(‘male’,’famale’)
- > );
使用CREATE TABLE语句创建一个表,这个表有2列,第一列是user,类型为最大长度为20的字符串。第二列是ENUM类型,其值的范围在括号内指定,多个值之间用逗号分隔。
为了测试,先使用SQL_MODE选项设置为STRICT_TRANS_TABLES模式,语句如下:
mysql>SET SQL_MODE = ‘STRICT_TRANS_TABLES’;
接下来,向t表中插入2行数据,语句如下:
mysql>INSERT INTO t VALUES(‘leeon’,’male);
mysql>INSERT INTO t VALUES(‘mary’,’girl’);
对于第二条指令会报错,因为没有在ENUM类型中定义。
(2)SET类型
与ENUM类似,但可以在预定义的集合中取得任意数量的值。1个SET类型最多可以包含64项元素。SET类型中不会包含重复的元素。在SET中插入非预定义的值都会使MySQL插入一个空字符串。如果插入一个既有合法元素又有非法元素的记录,MySQL将会保留合法元素,忽略非法元素。
例子:
创建一个仅包含1列的myset数据表。
mysql>CREATE TABLE myset(
- > col SET(‘a’,’b’,’c’,’d’)
- > );
分别使用不同的组合形式向myset表中插入数据:
mysql>INSERT INTO myset (col) VALUES
- > (‘a’,’d’),(‘a’,’b’,’a’);
对于第2个输入,已经自动去掉重复的元素。
6.一个数据库系统可以有多个数据库。不同数据库可以有不同的字符集和校对规则。
7.表是数据库最基本的组成对象,用来存储数据。和生活中的表一样,按行和列来划分。
8.MySQL创建数据库:
CREATE DATABASE db_name
[[default] CHARACTER SET charset_name]
[[default] COLLATE collation_name]
数据库在创建时需要设置数据库名称、字符集、校对规则(正好是上面的顺序)
如果不设置校对规则,采用默认校对。
如果不设置字符集、校对规则,采用默认字符集、校对规则。
查看当前服务器数据库列表:SHOW DATABASES
查看数据库详细信息:SHOW CREATE DATABASE 数据库名称。
9.数据库的修改:包括修改数据库的名称和字符集。InnoDB存储引擎的数据库无法修改数据库
名称,各种存储引擎的数据库都可以修改字符集的校对规则。
ALTER SCHEMA ‘数据库名称’ DEFAULT CHARACTER SET 修改后的校对规则;
ALTER SCHEMA ‘数据库名称’ DEFAULT CHARACTER SET 校对规则系列 DEFAULT COLLATE 校对规则;
10.删除数据库:DROP DATABASE 数据库名称
11.查看数据库中的表:SHOW TABLES
如查看sakila数据库下的表,代码如下:
USE sakila; SHOW TABLES;
12.查看表结构
即查看表的字段信息,其中包括:字段名、字段数据类型、是否是主键(主键类似于map中的key,其他类似于map中的value)、是否有默认值。
查看表的结构可以使用简单查询和详细查询,分别使用DESCRIBE/DESC语句和SHOW CREATE TABLE语句。
如查看sakila数据库中actor表的结构,代码如下:
USE sakila; DESC actor;
13.创建数据库中的表:
USE 数据库名称;
CREATE TABLE 表的名称(字段1的名称 字段1的类型 字段1的约束,字段2的名称 字段2的类型 字段2的约束…);
或
CREATE TABLE 数据库名称.表的名称(字段1的名称 字段1的类型 字段1的约束,字段2的名称 字段2的类型 字段2的约束…);
如上述在shop数据库中创建new_table表,代码如下:
CREATE TABLE ‘shop’.’new_table’ (
‘id’ INT NOT NULL,
‘name’ VARCHAR(45) NULL,
‘price’ FLOAT NULL,
PRIMARY KEY (‘id’));
上述代码把id作为主键,相当于map中key的功能。
14.添加表数据:使用INSERT INTO语句
例:
INSERT INTO ‘shop’.’new_table’ (‘id’ , ‘name’ , ‘price’) VALUES (‘1’,’apple’,’2.5’);
15.修改表的名称
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
如将shop数据库中的good表的名称修改为goodses,代码如下:
USE shop;ALTER TABLE goods RENAME goodses;
16.删除表
DROP TABLE tableName;
USE school; DROP TABLE student;
17.向表中添加字段(添加新的1列属性):使用ADD关键字
ALTER TABLE <表名> ADD <新字段名> <数据类型>
[约束条件] [FIRST | AFTER 已存在字段名]
例:
ALTER TABLE ‘shop’.’goodses’ ADD COLUMN ‘manager’ VARCHAR(45) NULL
AFTER ‘price’;
18.字段位置修改
ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST | AFTER <字段2>;
“字段1”指要修改位置的字段,“数据类型”指“字段1”的数据类型,“FIRST”为可选参数,指将“字段1”修改为表的第一个字段,“AFTER 字段2”指将“字段1”插入到“字段2”后面。
例:
ALTER TABLE ‘shop’.’goodses’ MODIFY ‘manager’ VARCHAR(45) AFTER ‘name’
19.字段名称修改:
ALTER TABLE 数据表 CHANGE COLUMN ’原字段名’‘新字段名’字段的数据类型 字段约束;
例:
ALTER TABLE ’shop’.’goodses’ CHANGE COLUMN ‘manager’ ‘principal’ VARCHAR(45) NULL DEFAULT NULL;
20.字段类型修改
ALTER TABLE 数据表 CHANGE COLUMN ‘字段名’ ‘字段名’ 字段的数据类型 字段约束;
例:
ALTER TABLE goodses CHANGE COLUMN ‘price’ ‘price’ VARCHAR(45) NOT NULL;
21.删除字段
ALTER TABLE 表名 DROP <字段名>;
例:
ALTER TABLE ‘shop’.’goodses’ DROP principal;
22.主键约束
主键是不允许有重复数据的列,能够唯一地确定记录。若表中具有实际意义的字段无法作为主键,可以为表添加一个字段作为主键(由系统自动分配)。
(1)主键通常是单列的,以便提高效率。MySQL支持主键组的使用,即将多个字段作为一个主键来使用。
(2)主键通常不能更换,能够唯一地标识一行数据。
(3)MySQL的主键通常是对用户没有意义的。(通常由计算机自动生成)
(4)MySQL主键最好不要包含动态变化的数据,如时间戳。
例:
构建复合主键:
CREATE TABLE ‘shop’.’table’{
‘id’ INT NOT NULL,
‘name’ VARCHAR(45) NOT NULL,
‘pas’ VARCHAR(45) NULL,
PRIMARY KEY(‘id’,’name’));
23.修改主键约束
例1.添加:
ALTER TABLE ‘shop’.’newtable’ CHANGE COLUMN ’id’ ‘id’ INT(11) NOT NULL,
ADD PRIMARY KEY(‘id);
例2.删除shop.newtable表的id列的主键,将主键转移到name列,代码如下:
ALTER TABLE ‘shop’.’newtable’
CHANGE COLUMN ‘id’ ‘id’ INT(11) NULL,
CHANGE COLUMN ‘name’ ‘name’ VARCHAR(45) NOT NULL,
DROP PRIMARY KEY,
ADD PRIMARY KEY (‘name’);
24.外键约束
主键用于标识表中的数据,而外键用于记录表之间的联系。一个数据库中的表通常是相互关联的。
添加外键有2种方式,1种是创建表时添加外键,1种是在现有表中添加外键约束。
INDEX ‘索引名’ (‘外键字段’,ASC),
CONSTRAINT ‘外键约束名’
FOREIGN KEY (‘外键字段’)
REFERENCES ‘外表名称’ (‘外表对应字段’)
约束选项;
因篇幅问题不能全部显示,请点此查看更多更全内容