数据库创建和删除
创建:
create DATABASE RUNOOB
删除:
drop database RUNOOB;
选择数据库
use RUNOOB;
mysql的数据类型
mysql的数据类型大致可以分为三类:数值、日期/时间和字符串(字符)类型。具体类型使用去查文档即可。
数据库表
1,创建表
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 如果不想字段值为null,则创建列的时候需要加上NOT NULL来限制,
- PRIMARY KEY是用来定义主键列的,主键列的数值在表中是唯一的。
- AUTO_INCREMENT是用来定义子增长列的。
2,修改表
//修改表名
ALTER TABLE testalter_tbl RENAME TO alter_tbl;
//修改表类型
ALTER TABLE testalter_tbl ENGINE = MYISAM;
//查看表类型
SHOW TABLE STATUS LIKE 'testalter_tbl'
3,修改表字段
ALTER TABLE testalter_tbl DROP i;//删除表字段
ALTER TABLE testalter_tbl ADD i INT;//添加表字段
//执行新增字段的位置,可以在alter命令中用first和after关键字。
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
//alter命令中使用modify修改字段类型,使用change修改字段名称和类型,可以指定not null以及默认值。
ALTER TABLE testalter_tbl MODIFY c CHAR(10) NOT NULL DEFAULT ‘100’;
ALTER TABLE testalter_tbl CHANGE i j BIGINT;
//修改字段默认值
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
//删除字段默认值
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
删除数据库表
和删除数据库使用同一个关键字drop
DROP TABLE table_name ;
插入数据库表数据
INSERT INTO runoob_tbl
(runoob_title, runoob_author, submission_date)
VALUES
("学习 PHP", "菜鸟教程", NOW());
更新数据
UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;
删除数据
DELETE FROM runoob_tbl WHERE runoob_id=3;
查询数据
where条件查询
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
- 查询的时候可以查找特定的字段,也可以使用查询所有的字段。
- where 用来限制查询条件,在where字句中可以指定任何查询条件
- limit用来限制返回的数量
- OFFSET用来设置查询的偏移量
like子句
SELECT * from runoob_tbl WHERE runoob_author LIKE '%COM'
在where子句中使用like来进行模糊查询%匹配任何字符。
union连接操作符
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
unoin是将查询的结果集进行合并,DISTINCT表示合并结果去除重复数据,默认是DISTINCT,ALL则会返回所有的数据
查询数据排序
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
- order by可以根据所列字段对查询结果进行排序
- order by后面可以跟多个排序字段,优先级按照先后顺序而定。
- ASC 或 DESC 关键字分别代表升序和降序排列,默认是ASC升序。 分组
SELECT name, COUNT(*) FROM employee_tbl GROUP BY name
- GROUP BY 语句根据一个或多个列对结果集进行分组。
- 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数
连接使用
mysql中使用JOIN 来联合多表查询,用inner join,left join, right join三种方式。
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
- innner join会返回左右两边都有数据,那么当前这条数据才会被返回。
- left join会以左边数据为基础,无论右边有没有连接到数据,都会返回当前这条数据
- right join与left join相反。
正则表达式REGEXP MySQL中使用 REGEXP 操作符来进行正则表达式匹配
SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
mysql事务
事务是为了保证数据库的完整性,一批sql语句要么全部执行,要么全部不执行。
事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)
mysql的事务是自动执行自动开启的,即执行完sql之后立马进行commit,所以我们要显示开启事务。
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
提交事务:
begin; # 开始事务
insert into runoob_transaction_test value(5);
insert into runoob_transaction_test value(6);
commit;# 提交事务
回滚事务:
begin; # 开始事务
insert into runoob_transaction_test value(5);
insert into runoob_transaction_test value(6);
rollback; # 回滚事务
ROLLBACK;# 提交事务
由于事务的持久性,当事务一旦提交之后,就不能再进行回滚。
mysql索引
索引可以使mysql的查询更高效,索引也是一张表,保存着对应的主键和索引信息,索引包括但索引和组合索引,使用时确保索引是能够在where子句中使用的,索引虽好胆识不能滥用,索引可以使查询速度提升,但是却在更新的时候比较消耗性能,因为要修改相应的索引表。索引表另外一个缺点是会占用磁盘空间。
创建索引的几种方式 创建普通索引和唯一索引都可以使用如下三种方式,下面展示了普通索引创建的三种方式。
1,直接在对应表字段中创建索引
CREATE INDEX indexName ON table_name (column_name)
2,修改表结构的时候进行创建
ALTER table tableName ADD INDEX indexName(columnName)
3,创建表的时候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length));
);
删除索引
DROP INDEX [indexName] ON mytable;
显示索引信息
SHOW INDEX FROM table_name
临时表
mysql的临时表是用来存放临时数据的表,只在当前连接中起作用。
//创建临时表
CREATE TEMPORARY TABLE SalesSummary (
product_name VARCHAR(50) NOT NULL
, total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
, avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
, total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
//插入临时表
INSERT INTO SalesSummary
(product_name, total_sales, avg_unit_price, total_units_sold)
VALUES
('cucumber', 100.25, 90, 2);
//查询临时表
SELECT * FROM SalesSummary;
//删除临时表
DROP TABLE SalesSummary;`
mysql复制表
我们可以根据现有的表复制其表结构到一个新表中,也可以将复制表的数据也插入的新表中。
复制表结构
//1,使用如下 命令然后获取创建表的语句进行重新创建表
SHOW CREATE TABLE runoob_tbl
//2,直接使用如下语句创建新的表
CREATE TABLE targetTable LIKE sourceTable;
如果你想拷贝数据表的数据你可以使用 INSERT INTO... SELECT 语句来实现。