mysql 基础

149 阅读5分钟

数据库创建和删除

创建:
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 DEFAULT100’;
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 语句来实现。