搜索
您的当前位置:首页正文

MySQL学习笔记

来源:知库网


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 ‘外表名称’ (‘外表对应字段’)

约束选项;

因篇幅问题不能全部显示,请点此查看更多更全内容

Top