【Mysql】数据库的基本操作
一、创建数据库
MySQL安装成功后,系统会自动创建information_schema 和MySQL数据库,这是系统数据库,MySQL数据库的系统信息都存储在这两个数据库中。如果删除了这些数据库,MySQL将不能正常工作。对于用户的数据,需要创建新的数据库来存放。
1.使用CREATE DATABASE或CREATE SCHEMA命令可以创建数据库
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS ] 数据库名
[ [DEFAULT] CHARACTER SET 字符集名 ]
| [DEFAULT] COLLATE 校对规则名]
语法说明如下
- 语句中的“[ ]”可选项,“{ | }”表示二选一。
- 语句中的大写单词为命令动词,输入命令时,不能更改命令动词含义,但 MySQL命令解释器对大小写不敏感,所以输入命令动词时只要词义不变,与大小写无关,即“CRETAE” “create”命令解释器在MySQL命令解释器中是同一含义。
- 语句中带下划线的斜体汉字为变量,输人命令前,一定要用具体的实意词替代,如“数据库名”要用将新建的用户数据库名(如“Petstore”“YGGL”等)来取代。同样,因为 MySQL命令解释器对大小写不敏感,无论用户输人的是大写还是小写,MySQL 命令解释器都视为小写,所以无论是输人“Petstore”还是“petstore”,MySOL命令解释器中建立的都是同一个数据库。
二、插入数据
1、插入数据方法
mysql中常用的三种插入数据的语句:
- insert into:正常的插入数据,插入数据的时候会检查主键或者唯一索引,如果出现重复就会报错;
- replace into:表示插入并替换数据,若表中有primary key或者unique索引,在插入数据的时候,若遇到重复的数据,则用新数据替换,如果没有数据效果则和insert into一样;
- insert ignore into:插入并忽略数据,如果中已经存在相同的记录,则忽略当前新数据。这样不用校验是否存在了,有则忽略,无则添加
2、语法格式
INSERT INTO
INSERT [IGNORE0] [INTO] 表名[(列名,…)]
VALUES ({表达式| DEFAULT}…),(…),…
| SET 列名={表达式| DEFAULT}, …
语法说明如下
- 列名:需要插人数据的列名。如果要给全部列插人数据,列名可以省略。如果只给表的部分列插人数据,需要指定这些列。对于没有指出的列,它们的值根据列默认值或有关属性来确定,MySOL处理的原则如下。
具有AUTONCREMENT属性的列,系统生成序号值来唯一标识列。
具有默认值的列,其值为默认值。
没有默认值的列,若允许为空值,则其值为空值;若不允许为空值,则出错。
类型为 timestamp 的列,系统自动赋值。
- VALUES 子句:包含各列需要插人的数据清单,数据的顺序要与列的顺序相对应。若表名后不给出列名,则在 VALUES 子句中给出每一列的值;如果列值为空,则值必须置为 NULL,否则会出错。
表达式:可以是一个常量、变量或一个表达式,也可以是空值NULL,其值
就的数据类型要与列的数据类型一致。例如,列的数据类型为int,插人的数据是“aaa”时就会出错。当数据为字符型和目期型时要用单引号括起来。
DEFAULT:指定为该列的默认值,前提是该列原先已经指定了默认值。如
果列清单和 VALUES 清单都为空,则INSERT 会创建一行,每个列都设置成默认值。
三、数据修改
1、单表数据修改
语法格式如下:
UPDATE [IGNORE] 表名
SET 列名 1 = 表达式1 [,列名2=表达式2…]
[WHERE 条件]
语法说明如下
- SET 子句:根据 WHERE 子句中指定的条件对符合条件的数据行进行修改。若语句中不设定 WHERE 子句,则更新所有行。
- 列名1、列名2…:如果要修改列值的列名,可以同时修改所在数据行的多个列值中间用逗号隔开。
- 表达式1、表达式2……可以是常量、变量或表达式。
2、多表数据修改
语法格式如下:
UPDATE [IGNORE] 表名列表
SET 列名 1 = 表达式1 [,列名2=表达式2…]
[WHERE 条件]
语法说明如下:
- 表名列表:包含了多个表的联合,各表之间用逗号隔开。
多表修改语法的其他部分与单表修改语法相同。
四、数据删除
1、使用DELETE语句删除数据
1.1、从单个表中删除行
语法格式如下:
DELETE [IGNORE] FROM 表名
[WHERE 条件]
语法说明如下
- FROM子句:用于说明从何处删除数据,表名为要删除数据的表名
- WHERE子句:条件中的内容为指定的删除条件。如果省略WHERE子句,则删除该表的所有行
1.2、从多个表中删除数据
语法格式如下:
DELETE [IGNORE] 表名1[.*] [,表名2[.*]…]
FROM 表名列表
[WHERE 条件]
或
DELETE [IGNORE]
FROM 表名1 [.*] [,表名2[.*]…]
USING 表名列表
[WHERE 条件]
语法说明如下:
表名列表:包含了多个表的联合,各表之间用逗号隔开。
多表删除语法的其他部分与单表删除语法相同。
以上两种语法只是写法不同,作用都是同时删除多个表中的行,并且在删除时可以使用其他表来搜索要删除的记录。第一种语法只删除列于 FROM 子句之前的表中对应的行,第二种语法只删除列于 FROM 子句之中(在 USING 子句之前)的表中对应的行。
2、使用TRUNCATE TABLE 语句删除表数据
使用 DELETE 语句删除记录时,每次删除一行,并在事务日志中为所删除的每行进行记录,当要删除表中所有记录,且记录很多时,命令执行较慢。这时使用TRUNCATE TABLE语句会更加快捷。TRUNCATETABLE语也称为清除表数据语句。
语法格式如下:
TRUNCATE TABLE 表名
语法说明如下:
- 使用TRUNCATE TABLE语句后,AUTO_INCREMENT计数器被重新设置为该列的初始值。
- 对于参与了索引和视图的表,不能使用 TRUNCATETABLE 语句删除数据,而应使用 DELETE 语句。
TRUNCATETABLE语句在功能上与不带WHERE子句的DELETE语句相同,如TRUNCATE TABLE book与DELETE FROM book 功能相同,二者均删除 book 表中的全部行。但 TRUNCATE TABLE语句比DELETE语句执行速度快,且使用的系统和事务日志资源少。这是因为DELETE语句每删除一行,都在事务目志中为所删除的行记录一项;而TRUNCATE TABLE语句通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
由于 TRUNCATE TABLE 语句将删除表中的所有数据,且无法恢复,因此使用时必十分小心。
END—