mysql总结


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值