Mysql学习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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学习的主要内容,如果未能解决你的问题,请参考以下文章
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段