MySQL使用详解--根据个人学习总结
1.安装配置
2.启动mysql服务并配置
mysql> \s(status也行) 查看当前服务器状态 查看编码状态 Server characterset : utf8 Db characterset: utf8 Client characterset: gbk Conn. characterset: gbk 修改:---进入配置文件my.ini 客户端: [mysql] default-character-set=utf8 服务端: [mysqld] character-set-server=utf8
3.登陆/退出MySql
登陆: 常用参数: -u, --username=name用户名(注:5.5版本去掉了--username写法) -p, 密码 -h, --host服务器名称 -P, --port端口号 -D, --database, 打开指定数据库 --prompt=name, 设置命令提示符 --delimiter=name, 指定分隔符 -V,--version,输出版本信息并且退出 案例: a)mysql -rroot -p b)mysql -h127.0.0.1 -uroot -p c)mysql -h127.0.0.1 -uroot -p --prompt=abc (只对当前连接有效) d)mysql -uroot -proot -V
退出: exit quit \q Ctrl + c
4.Mysql常用命令:
显示当前版本 SELECT VERSION(); 显示当前日期时间 SELECT NOW(); 显示当前用户 SELECT USER(); 修改分隔符 DELIMITER \ 开启输出日志 \T +路径 结束输出日志 \t
MYSQL语句规范: 1.关键字与函数名称全部大写 2.数据库名称,表名称,字段名称等全部小写 3.SQL语句必须以分隔符结尾 4.SQL语句支持折行操作,只要不把单词,标记或引号字符分割为两部分,可以在下一行继续写 5.数据库名称,表名称,字段名称等尽量不要使用MySQL的保留字,如果需要使用的时候 需要使用反引号('')将名称括起来
5.数据库操作:
a)创建数据库:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET [=] CHARSET_NAME] CREATE DATABASE test CHARACTER SET=UTF8 b)查看当前服务器下的数据列表: SHOW {DATABASES | SCHEMA} 得到当前打开的数据库名称 : SELECT DATABASE(); c)查看上一步操作产生的警告信息: SHOW WARNINGS; d)删除指定数据库 DROP {DATABASE|SCHEMA} [IF EXISTS] db_name 案例:DROP DATABASE db_aaa1 SHOW DATABASES e)查看指定数据库的定义 : SHOW CREATE {DATAASE|SCHEMA} db_name f)修改指定数据库的编码方式:ALTER {DATABASE|SCHEMA} db_name [DEFAULT] CHARACTER SET[=] charset_name g)打开指定数据库: USE db_name
6.Mysql中的数据类型 --具体常用的可以参考
整数类型 --int --TINYINT(1),0为false,其余为true 浮点类型 --FLOAT 4字节 字符串类型--CHAR(M) M 个字节,0<=M<=255 | VARCHAR(m) 0<=M<=65535 L+1个字节 | ENUM('value1','value2'..)1或两个字节,取决于枚举值的个数最多65535个值 日期时间类型 time date datetime year TIMESTAEP 二进制类型 视频格式,图片路径啊等
bit[(M)] 二进制位(101001),m表示二进制位的长度(1-64),默认m=1 tinyint[(m)] [unsigned] [zerofill] 小整数,数据类型用于保存一些范围的整数数值范围: 有符号: -128 ~ 127. 无符号: 0 ~ 255 特别的: MySQL中无布尔值,使用tinyint(1)构造。 int[(m)][unsigned][zerofill] 整数,数据类型用于保存一些范围的整数数值范围: 有符号: -2147483648 ~ 2147483647 无符号: 0 ~ 4294967295 特别的:整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select 时数据显示为: 00002 bigint[(m)][unsigned][zerofill] 大整数,数据类型用于保存一些范围的整数数值范围: 有符号: -9223372036854775808 ~ 9223372036854775807 无符号: 0 ~ 18446744073709551615 decimal[(m[,d])] [unsigned] [zerofill] 准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。 特别的:对于精确数值计算时需要用此类型 decaimal能够存储精确值的原因在于其内部按照字符串存储。 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。 无符号: -3.402823466E+38 to -1.175494351E-38, 0 1.175494351E-38 to 3.402823466E+38 有符号: 0 1.175494351E-38 to 3.402823466E+38 **** 数值越大,越不准确 **** DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。 无符号: -1.7976931348623157E+308 to -2.2250738585072014E-308 0 2.2250738585072014E-308 to 1.7976931348623157E+308 有符号: 0 2.2250738585072014E-308 to 1.7976931348623157E+308 **** 数值越大,越不准确 **** char (m) char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。 PS: 即使数据小于m长度,也会占用m长度 varchar(m) varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。 注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡 text text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。 mediumtext A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters. longtext A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters. enum 枚举类型, An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.) 示例: CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') ); INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small'); set 集合类型 A SET column can have a maximum of 64 distinct members. 示例: CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS('-838:59:59'/'838:59:59') YEAR YYYY(1901/2155) DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
7.(一)数据库表相关操作
a.什么是表?
1 数据表是数据库最重要的组成部分之一,是其他对象的基础 2 数据表是存储数据的数据结构 3 数据表示包含了特定实体类别的数据 4 数据表由行(row)和列(column)构成的二维网络 5 数据表一定现有表结构,再有数据 6 数据表至少有一列,可以没有行或者多行 7 数据表名称要求唯一,而且不要包含特殊字符
b.如何创建数据表?
1 CREATE TABLE [IF NOT EXISTS] tbl_name(字段名称 字段类型 [完整性约束条件]。。。)ENGINE=引擎名称 CHARSET='编码方式'; 2 完整性约束条件: 3 1.PRIMARY KEY主键v--唯一的字段,且不能重复 4 2.AUTO_INCREMENT自增长 5 3.FOREIGN KEY 外键 6 4.NOT NULL 非空 7 5.UNIQUE KEY 唯一 8 6.DEFAULT默认值
c.如何查看数据库中的数据表以及表结构?
1 查看数据库下的数据表: SHOW TABLES 2 查看指定表的表结构: 3 DESC tbl_name 4 DESCRIBE tbl_name 5 SHOW COLUMNS FROM tbl_name
d.创建表
案例一:创建新闻分类cms_cate 编号,分类名称,分类描述
后加:注意一个地方:create table ....(id int,caption chr注意这里写完就没有逗号了)。。。;否则报错,大爷的找了一晚上。
1 CREATE TABLE IF NOT EXISTS cms_cate( 2 id TINYINT, 3 cateName VARCHAR(50), 4 cateDesc VARCHAR(200), 5 )ENGINE=MyISAM CHARSET=UTF8;
案例二:
创建新闻表cms_news
编号,新闻标题,新闻内容,新闻发布时间,点击量,是否置顶,新闻所属分类,发布人
1 CREATE TABLE Persons 2 ( 3 Id_P int NOT NULL, 4 LastName varchar(255) NOT NULL, 5 FirstName varchar(255), 6 Address varchar(255), 7 City varchar(255), 8 UNIQUE (Id_P) 9 );
1 CREATE TABLE IF NOT EXISTS cms_testnews( 2 id INT PRIMARY KEY, 3 title VARCHAR(50) unique not null, 4 content TEXT not null, 5 pubTime INT unique not null, 6 isTop TINYINT(1) COMMENT '0代表不置顶,1代表置顶' 7 ) ENGINE=InnoDB CHARSET=UTF8;
7.(二)MySQL 存储引擎
a.什么是存储引擎?
1 存储引擎就是指表的类型。数据库的存储类型决定了表在计算机中的存储方式。用户可以根据不同的存储方式、是否 2 进行事务处理等来选择合适的存储引擎
b.如何查看MySQL的存储引擎?
1 查看MySQL支持的存储引擎: SHOW ENGINES \G; 2 Engine:存储引擎 3 Support:是否支持这种存储引擎 4 Comment:引擎特点 5 Transactions:是否支持事务处理 6 XA:是否是分布式的交易处理 7 Savepoints:是否支持保存点 8 查看显示支持的存储引擎信息: SHOW VARIABLES LIKE 'have%' 9 查看默认的存储引擎: SHOW VARIABLES LIKE 'storage_engine'
c.MySQL常用存储引擎及特点:
1 InnoDB存储引擎 --5.1版本之后 2 事务修改:---进入配置文件my,回滚,修复,分布式,多版本并发控制的事物安全 3 4 MyISAM存储引擎 --5.1版本之前 5 frm --存储表结构 6 myd --存储数据 7 myi --存储索引 8 MEMORY存储引擎 9 数据存储在内存,安全性低,速度快,生命周期短
d.如何选择合适的存储引擎?
---建议根据需求来选择存储引擎
完整性约束条件:
1、给字段选择合适的类型
PRI代表主键 不能为空, 一个表中只能有一个主键
查看创建表的定义 SHOW CREATE TABLE user1;
2、AUTO_INCREMENT自增长
被标志成自增长的一定是主键,主键不一定是自增长的
CREATE TABLE IF NOT EXISTS user5(
id SMALLINT KEY AUTO_INCREMENT,
username VARCHAR(20)
); --)AUTO_INCREMENT=100;指定起始值increment(自增长)
INSERT user5 VALUES(1,'KING');
由于是自增长,可以换种写法
INSERT user5(username) VALUES('QUEN');
3、NOT NULL非空 --经常配合默认值使用
无符号的UNSIGEND(unsigned) CREATE TABLE IF NOT EXISTS user7( id INT UNSIGNED KEY AUTO_INCREMENT, 意思id是无符号的自增长的键 username VARCHAR(20) NOT NULL, password CHAR(32) NOT NULL, age TINYINT UNSIGNED ); INSERT user7(username, passwprd) VALUES('KING', 'KING'); INSERT user7(username, passwprd, age) VALUES('KING', 'KING', 12); INSERT user7(username, passwprd) VALUES(NULL, 'KING');
4.DEFAULT默认值
CREATE TABLE IF NOT EXISTS user7( id INT UNSIGNED KEY AUTO_INCREMENT, 意思id是无符号的自增长的键 username VARCHAR(20) NOT NULL, password CHAR(32) NOT NULL, age TINYINT UNSIGNED DEFAULT 18 );
5.UNIQUE KEY 唯一(一个表中只能有一个主键,但可以有多个唯一)
CREATE TABLE IF NOT EXISTS user9( id TINYINT UNSIGNED KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL UNIQUE, card CHAR(18) UNIQUE ) DESC user9 ;
6.外键(后面讲-配合多表查询)
外键,一个特殊的索引,只能是指定内容
可以理解为如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。
creat table color( nid int not null primary key, name char(16) not null ) create table fruit( nid int not null primary key, smt char(32) null , color_id int not null, constraint fk_cc foreign key (color_id) references color(nid) )
如何操作表结构
修改表名:ALTER TABLE tbl_name RENAME [TO|AS] NEW_NAME RENAME TABLE tbl_name TO new_name 添加字段:ALTER TABLE tbl_name ADD 字段名称 字段类型【完整性约束条件】[FIRST|AFTER字段名称] 删除字段:ALTER TABLE tbl_name DROP 字段名称 修改字段属性:ALTER TABLE tbl_name MODIFY 字段名称 字段类型【完整性约束条件】【FIRST|AFTER 字段名称】 修改字段名称:ALTER TABLE tbl_name CHANGE 旧字段名称 新字段名称字段类型[完整性约束条件]【FIRST|AFTER字段名称】 添加默认值:ALTER TABLE tbl_name ALTER 字段名称SET DEFAULT默认值 删除默认值:ALTER TABLE tbl_name ALTER 字段名称 DFOP DEFAULT 添加主键:ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY[index_type] (字段名称,...) 删除主键:ALTER TABLE tbl_name DROP PRIMARY KEY 添加唯一:ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [索引名称](字段名称,..) 删除唯一:ALTER TABLE tbl_name DROP {INDEX|KEY} index_name 修改表的存储引擎:ALTER TABLE tbl_name ENGING=存储引擎名称 设置自增长的值:ALTER TABLE tbl_name AUTO_INCREMENT=值 5.如何删除数据表 DROP TABLE[IF EXISTS] tbl_name[,tbl_name....]
CREATE TABLE IF NOT EXISTS user10( id SMALLINT UNSIGNED KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL UNIQUE, password CHAR(32) NOT NULL, email VARCHAR(50) NOT NULL DEFAULT '12344@qq.com', );
添加字段
以user10为例 添加card字段CHAR(18); ALTER TABLE user10 ADD card CHAR(18); 查看表结构:DESC user10; 完整性约束条件: ALTER TABLE user10 ADD test VARCHAR(100) NOT NULL UNIQUE; ALTER TABLE user10 ADD test1 VARCHAR(100) NOT NULL FIRST; ALTER TABLE user10 ADD test2 VARCHAR(100) NOT NULL DEFAULT 100 AFTER username; 选中一次表,完成多个操作 ALTER GTABLE user10 ADD test4 INT NOT NULL DEFAULT 123 AFTER password, ADD test5 FLOAT(6,2) FIRST, ADD test6 SET('A','B','C'); 查看表结构:DESC user10;
删除email字段
ALTER TABLE user10 DROP test6;
ALTER TABLE user10 DROP test1;
DESC user10;
一次删除多个字段
ALTER TABLE user10
DROP test2,
DROP test3,
....;
添加test字段删除addr字段
ALTER TABLE user10 ADD test INT UNSIGNED NOT NULL DEFAULT 10 AFTER sex, DROP addr;
修改字段属性
ALTER TABLE uer10 MODIFY email VARCHAR(200);--修改的是所有属性,没写的会变回默认 所以建议在改之前要先DESC tbl_name;查看一下表结构
添加默认值
CREATE TABEL IF NOT EXISTS test12( id TINYINT UNSIGNED KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL UNIQUE, age TINYINT UNSIGNED );
添加默认值: ALTER TABLE user11 ALTER age SET DEFAULT 18; DESC user11; ALTER TABLE user11 ALTER age DROP DEFAULT; ALTER TABLE user11 ALTER username DROP DEFAULT;
如何添加主键
CREATE TABLE IF NOT EXISTS test12(
id INT
);
ALTER TABLE test12 ADD PRIMARY KEY(id);
CREATE TABLE IF NOT EXISTS test13( id INT, card CHAR(18), username VARCHAR(20) NOT NULL ); ALTER TABLE test13 ADD PRIMARY KEY(id, card);
删除test12表的主键
ALTER TABLE test12 DROP PRIMARY KEY;
在添加回来
ALTER TABLE test12 ADD CONSTRAINT symbol PRIMARY KEY index_type(id);
----注意:
带有主键的自增长---删除 CREATE TABLE IF NOT EXISTS test14( id INT UNSIGNED KEY AUTO_INCREMENT ); ALTER TABLE test14 DROP PRIMARY KEY; ---会报错;所以先删除自增长 所以: ALTER TABLE test14 MODIFY id INT UNSIGNED;利用MODIFY关键字去掉了特殊属性;(就是利用修改属性,没修改的变成默认值) ALTER TABLE test14 DROP PRIMARY KEY;
修改表的存储引擎
修改表的存储引擎为MyISAM;
ALTER TABLE user12 ENGINE=MyISAM; 修改自增长的值 ALTER TABLE user12 AUTO_INCREMENT=100;
删除数据表
DROP TABLE[IF EXISTS] tbl_name[, tbl_name...]
DROP TABLE IF EXISTS user12;
SHOW WARNINGS; 查看警告
DROP TABLE IF EXISTS user1,user2,user3;
清空自增id
我们的数据库表中经常会使用id自增,但是每次清空表后id并不是从1开始计数,总是接着之前的进行自增,那么解决呢?
使用mysql的truncate命令,用法:truncate table 表名;
出处:http://www.cnblogs.com/renfanzi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。