首页 > 代码库 > Mysql学习

Mysql学习

Mysql管理

启动Mysql服务器

关闭Mysql服务器


Mysql用户设置

添加用户


Mysql管理命令

SHOW DATABASES;

USE 数据库名;

SHOW TABLES;

SHOW COLUMNS FROM 数据表;

SHOW INDEX FROM 数据表;

SHOW TABLE STATUS FROM 数据库名;


mysqli_connect();

mysqli_query(,"SQL语句");

mysql_fetch_arry();

mysql_connect();

mysql_close();


Mysql连接

1、mysql -u root -p

2、mysql_connect(server,user,passwd,new_link,client_flag);

  参数:要连接的服务器、用户名、密码、、

  返回值:创建连接成功后返回MySQL连接标示符

  mysql_close();

  用来断开与MySQL数据库的连接


创建数据库

1、mysqladmin -u root -p create 数据库名

2、bool mysql_query(sql,connection);

  参数:sql为SQL查询,connection为SQL连接标识,由mysql_connect()返回

3、CREATE database 数据库名


删除数据库

1、mysqladmin -u root -p drop 数据库名

2、bool mysql_query(sql,connection);


选择数据库

1、USE 数据库名;

2、bool mysql_select_db(db_name,connection);


Mysql数据类型

Mysql中定义数据字段的类型对数据库的优化是非常重要的

数值类

严格数值数据类型

TINYINT(1字节)、SMALLINT(2字节)、MEDIUMINT(3字节)、INT/INTEGER(4字节)、BIGINT(8字节)

DECIMAL——对于DECIMAL(M,D),如果M>D,大小为M+2,否则为D+2 适用于小数值

NUMERIC

近似数值数据类型

FLOAT(4字节)

REAL

DOUBLE(8字节)

日期/时间类

DATE(3字节) 日期值 YYYY-MM-DD

TIME(3字节) 时间值 HH:MM:SS

TEAR(1字节) 年份值 YYYY

DATETIME(8字节) 混合日期和时间值 YYYY-MM-DD HH:MM:SS

TIMESTAMP(4字节) 混合日期和时间值,时间戳 YYYYMMDD HHMMSS

当前时间 NOW()

字符串(字符)类

CHAR    定长字符串(0-255字节)

VARCHAR    变长字符串(0-65535)

TINTBLOB    不超过255个字符的二进制字符串(0-255)

TINYTEXT    短文本字符串(0-255)

BLOB    二进制形式的长文本数据(0-65535)

TEXT    长文本数据(0-65535)

MEDIUMBLOB    二进制形式的中等长度文本数据(0-16777215)

MEDIUMTXT    中等长度文本数据(0-16777215)

LOONGBLOB    二进制形式的极大文本数据(0-4294967295)

LONGTEXT    极大文本数据(0-4294967295)


Mysql创建数据表

CREATE TABLE 表名(column_name column_type);

mysql> CREATE TABLE runoob_tbl(
   -> runoob_id INT NOT NULL AUTO_INCREMENT,
   -> runoob_title VARCHAR(100) NOT NULL,
   -> runoob_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( runoob_id )
   -> );Query OK, 0 rows affected (0.16 sec)mysql>

SHOW COLUMNS FROM runoob_tb1;可查看字段属性


Mysql删除数据表

DROP TABLE 表名;


Mysql查看数据表类型等

SHOW TABLES;

SHOW TABLE STATUS;

SHOW TABLE STATUS\G


Mysql插入数据

INSERT INTO 表名 (field1,field2,field3...)VALUES(value1,value2,value3...);


Mysql查询数据

SELECT column_name.column_name FROM 表名 [WHERE Clause] [OFFSET M] [LIMIT N];


Mysql更新数据

UPDATE 表名 SET field1="newvalue1",feild2="newvalue2" [WHERE Caluse];


Mysql删除数据

DELETE FROM 表名 [WHERE Caluse];

当不指定WHERE字句时,将删除表中表中所有记录


WHERE子句

mysql的WHERE字句比较字符串是不区分大小写的,除非加上关键字BINARY技术分享


LIKE子句

SELECT field1,field2,field3 FROM 表名1,表名2 WHERE field1 LIKE condition1 [AND [OR]] filed2=‘somevalue‘;


通常和‘%‘一起使用,相当于正则表达式中的‘*‘,代表任意字符

可以在UPDATE或DELETE中使用WHERE...LIKE字句


Mysql排序 ORDER BY 

SELECT field1,field2,field3 FROM 表名1,表名2 ORDER BY fieldn [ASC [DESC]];

默认情况下它是升序的(ASC)


GROUP BY语句

GROUP BY语句根据一个或多个列对结果集进行分组

使用WITH ROlLLUP


Mysql连接 JOIN
INNER JOIN

LEFT JOIN

RIGHT JOIN


Mysql的NULL值处理

IS NULL

IS NOT NULL

<=>


Mysql正则表达式

REGEXP


 SELECT runoob_author FROM tcount_tbl WHERE runoob_author REGEXP ‘^m‘;

 SELECT runoob_author FROM tcount_tbl WHERE runoob_author REGEXP ‘an$‘;


Mysql事务

在Mysql中只有使用了Innodb数据库引擎的数据库或表才支持事务

事务处理用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行

事务用来管理INSERT,UPDATE,DELETE语句


四个必须条件

1、原子性:一组事务,要么成功,要么撤回

2、一致性

3、隔离性:事务独立运行,一个事务处理后的结果,影响了其他事务,那么其他事务会撤回

4、可靠性:软、硬件崩溃后,Innodb数据表驱动会利用日志文件重构


事务的分类:

1、扁平事务:最简单常用,缺点是不能提交或回滚事务的某一部分

2、带有保存点的扁平事务:允许事务在执行过程中回滚到同一事务中较早的一个状态,保存点用来通知系统应该记住事务当前的状态,以便以后发生错误,事务能够回到该状态

3、链事务:回滚时,只能回复到最近一个保存点

4、嵌套事务:位于根节点的事务成为顶层事务,事务的前驱称为父事务,事务的下一层称为子事务,子事务既可以提交也可以回滚,但它的提交并不马上生效,除非尤其父事务提交

5、分布式事务:


开始事务:START TRANSACTION、BEGIN、BEGINWORK 显示的开启一个事务

进行相关操作:

提交事务:COMMIT 会提交事务,并使以对数据库进行的所有修改成为永久性的

撤销事务:ROLLBACK 结束用户的事务,并撤销正在进行的所有未提交的修改

创建一个保存点:SAVEPOINT identifier 允许在事务中创建一个保存点,一个事务可有多个SAVEPOINT

删除一个保存点:RELEASE SAVEPOINT identifier 当没有指定的保存点时,该语句会抛出一个异常

回滚到标记点:ROLLBACK TO identifier 把事务回滚到标记点

设置事务的隔离级别:SET TRANSACTION 在数据库操作中,为了有效保证并发读取数据的正确性提出的


InnoDB存储引擎提供事务的隔离级别有:

隔离级别             脏读    不可重复读    幻读

未提交读(Read Uncommitted)   可能      可能      可能

已提交读(Read Committed)     不可能      可能      可能

可重复读(Repeatable read)    不可能     不可能     可能

可串行化(Serializable)      不可能     不可能     不可能


  • 脏读:一个事务读取到了另外一个事务没有提交的数据;
    比如:事务T1更新了一行记录的内容,但是并没有提交所做的修改。事务T2读取到了T1更新后的行,然后T1执行回滚操作,取消了刚才所做的修改。现在T2所读取的行就无效了;

  • 不可重复读:在同一事务中,两次读取同一数据,得到内容不同;
    比如:事务T1读取一行记录,紧接着事务T2修改了T1刚才读取的那一行记录。然后T1又再次读取这行记录,发现与刚才读取的结果不同。这就称为“不可重复”读,因为T1原来读取的那行记录已经发生了变化;

  • 幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同;
    比如:事务T1读取一条指定的WHERE子句所返回的结果集。然后事务T2新插入 一行记录,这行记录恰好可以满足T1所使用的查询条件中的WHERE子句的条件。然后T1又使用相同的查询再次对表进行检索,但是此时却看到了事务T2刚才插入的新行。这个新行就称为“幻像”,因为对T1来说这一行就像突然出现的一样。


Mysql的ALTER命令修改数据表名或数据表字段

删除添加表字段,FIRST(设定为第一列),AFTER(设定为某个字段之后)

ALTER TABLE 表名 DROP 字段;

ALTER TABLE 表名 ADD 字段 字段类型;

ALTER TABLE 表名 ADD 字段 字段类型 FIRST;

ALTER TABLE 表名 ADD 字段1 字段类型 AFTER 字段2;


修改字段类型及名称

ALTER TABLE 表名 MODIFY 字段 新类型;

ALTER TABLE 表名 CHANGE 字段 新字段 类型;


ALTER TABLE 表名 MODIFY 字段 类型 NOT NULL DEFAULT 值;


设置字段的默认值:ALTER TABLE 表名 ALTER 字段 SET DEFAULT 值;


恢复字段的默认值:

ALTER TABLE 表名 ALTER 字段 DROP DEFAULT;


修改表名:

ALTER TABLE 旧表名 RENAME 新表名;


Mysql的索引

单列索引    一个表可以包含多个单列索引

组合索引


索引也是一张表,保存了主键与索引字段,并指向实体表记录


索引提高了查询速度,也降低了表更新速度


普通索引

唯一索引

使用ALTER命令添加删除索引

使用ALTER命令添加删除主键


显示索引信息

SHOW INDEX FROM 表名\G


Mysql的临时表

临时表在保存一些临时数据时是非常有用的,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间,也可用DROP TABLE 表名来删除

CREATE TEMPORARY TABLE 表名(字段1,字段2...)VALUSES(值1,值2...);

DROP TABLE 表名


用SHOW TABLES命令是不会显示临时表的


Mysql的复制表

步骤:

1、使用SHOW CREATE TABLE 表名\G,该语句包含了原数据表的结构,索引等

2、复制第一条命令下显示的SQL语句,修改数据表名

3、如果想复制表的内容,使用INSERT INTO 克隆的表名 (字段1,字段2...)

                        SELECT 字段1,字段2... FROM 原表名; 


Mysql元数据



Mysql序列使用

AUTO_INCREMENT可实现自动增长


重置序列:(如果删除了数据表中多条记录,并希望对剩下数据的AUTO_INCREMENT列进行重新排列)

例:

ALTER TABLE insect DROP id;

ALTER TABLE insect 

    -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,

    -> ADD PRIMARY KEY (id);


两种方法设置序列的开始值

1、创建数据表时

CREATE TABLE insect   
 -> (id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL, # type of insect
    -> date DATE NOT NULL, # date collected
    -> origin VARCHAR(30) NOT NULL # where collected);

2、创建成功后

 ALTER TABLE insect AUTO_INCREMENT = 200;


Mysql处理重复数据

防止数据表中出现重复数据

设置主键、或双主键,即建表的时候设置主键,执行语句PRIMARY KEY(字段1,字段2)

技术分享

技术分享


以下两条语句的区别是第一条语句会忽略数据库中已经存在的数据

INSERT IGNORE INTO 表名 (字段1,字段2...) VALUES (值1,值2...);

INSERT INTO 表名 (字段1,字段2...) VALUES (值1,值2...);


过滤重复数据

DISTINCT

技术分享


删除重复数据

1、新创建一个表,删掉原来的表,新表更改名字

2、添加索引和主键 ALTER IGNORE TABLE 表名 ADD PRIMARY KEY(字段1,字段2...);






《完    》


本文出自 “零蛋蛋” 博客,谢绝转载!

Mysql学习