mysql是现在非常流行的(RDBMS:Relational Database Management System)关系型数据库,因为它的性能非常好,更重要的是免费的,一般中小型企业完全是够用的。
Linux平台下安装mysql
需要的包:mysql服务器,mysql-client客户端程序,mysql-devel库和包含文件,mysql-shared,mysql-bench
rpm -qa | grep mysql
rpm -e mysql
rpm -e --nodeps mysql
yum install mysql
yum install mysql-server
yum install mysql-devel
service mysqld start
如果用的是Centos7版本,可以直接使用mariadb --> yum install mariadb-server mariadb
systemctl start mariadb #启动mariadb
systemctl stop mariadb #停止mariadb
systemctl restart mariadb #重启mariadb
systemctl enable mariadb #设置开机启动
[root@xiangping]# mysql
mysql> show databases;//可以看到数据库列表
连接:mysql -u root -p *********
参数列表:
username 用户名
password 密码
dbname 数据库
port 服务器端口
host ip地址
创建数据库:create database 'dbname';
删除数据库:drop database 'dbname';
使用数据库:use dbname;
mysql的数据类型:
1.基本类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期与时间类型
类型 | 大小 (字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
创建数据库表:
CREATE TABLE `xp` (
`uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户主键ID' ,
`username` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户昵称' ,
`gender` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别' ,
`mobile` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '手机号' ,
`passwd` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码' ,
`createtime` datetime NULL DEFAULT NULL COMMENT '创建时间' ,
PRIMARY KEY (`uid`)
FOREIGN KEY (`did`) REFERENCES `device` (`did`) ON DELETE CASCADE ON UPDATE RESTRICT,
FOREIGN KEY (`mgid`) REFERENCES `macro_group` (`mgid`) ON DELETE CASCADE ON UPDATE RESTRICT,
INDEX `macro_dev_fk` (`did`) USING BTREE ,
INDEX `macro_macrogroup_fk` (`mgid`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=1
ROW_FORMAT=DYNAMIC;
删除数据库表:drop table tablename
添加数据:
insert into xp (uid,username,gender,mobile,passwd,createtime) values(1,'xiangping','男','13111111111','123456',now());
删除数据:
delete from xp where uid = 1
delete from xp where uid in(1,2,3)
delete from xp;
修改数据:
update xp set username = 'xp' where uid = 1
查询数据格式:
select 选择的列
from 表
where 查询的条件
group by 分组属性 having 分组过滤的条件
order by 排序属性
limit 起始记录位置,取记录的条数
select * from xp;
select * from where uid = 1;
select username,gender from xp where uid = 1;
select * from xp where gender = '男‘ and username like '%平%’;
select * from users where uid > 10 order by username desc;
select gender,count(*) as '个数' from users where uid > 10 group by gender;
select d.dname da.usbspeed from device d INNER JOIN device_attribute da ON d.did = da.did;
select * from users1 u1 left join users2 u2 on u1.id = u2.id left join users3 u3 on u2.id = u3.id;
select * from users1 u1 right join users2 u2 on u1.id = u2.id right join users3 u3 on u2.id = u3.id;
.....
查询数据练习:
1.子句查询:http://www.cnblogs.com/chiangchou/p/mysql-2.html
2.子查询:http://www.cnblogs.com/chiangchou/p/mysql-3.html
mysql数据库正则:
模式 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。 |
. | 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 |
[...] | 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 |
[^...] | 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。 |
p1|p2|p3 | 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
查找name字段中以'st'为开头的所有数据:select name from person where name regexp '^st'
查找name字段中以'ok'为结尾的所有数据:select name from person where name regexp 'ok&'
查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:select name from person where name regexp '^[aeiou]|ok&'
函数和视图:http://www.cnblogs.com/chiangchou/p/mysql-4.html
数据库的优化:http://www.cnblogs.com/chiangchou/p/mysql-5.html
数据库查询优化:http://www.cnblogs.com/chiangchou/p/mysql-5.html
事务
一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
- 1、事务的原子性:一组事务,要么成功;要么撤回。
- 2、稳定性 :有非法数据(外键约束之类),事务撤回。
- 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
- 4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 选项 决定什么时候吧事务保存到日志里。
-
事物控制语句:
-
BEGIN或START TRANSACTION;显式地开启一个事务;
-
COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;
-
ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
-
SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;
-
RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
-
ROLLBACK TO identifier;把事务回滚到标记点;
-
SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。
MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
- SET AUTOCOMMIT=0 禁止自动提交
- SET AUTOCOMMIT=1 开启自动提交
数据库的alter命令
删除表字段:alter table users drop username
添加表字段:alter table users add username varchar(50) not null
alter table users add username varchar(40) first
alter table users add username varchar(50) not null after uid
修改表字段:alter table users modify username char(20)
alter table users change username uname varchar(30)
alter table users modify gender varchar(4) not null default '男‘
修改默认值字段:alter table users alter age set default 10
删除默认值字段:alter table users alter age drop default;
修改表名:alter table user rename to alter user_xp
修改存储引擎:alter table users engine=myisam
删除外键约束:alter table users drop foreign key keyName
修改字段的相对位置:这里name1为想要修改的字段,type1为该字段原来类型,first和after二选一,这应该显而易见,first放在第一位,after放在name2字段后面:alter table tablename modify name1 type1 first | after name2