MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下。MySQL是当前最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System, 关系型数据库管理系统)应用软件之一。html
MySQL是一个基于socket编写的C/S架构的软件 # MySQL中自带的数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等。 performance_schema: MySQL5.5开始新增的一个数据库,主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各类时间、锁等现象。 mysql: 受权库,主要存储系统用户的权限信息。 test: MySQL数据库系统自动建立的测试数据库。
Linux版本mysql
# 二进制rpm包安装 yum -y install mysql-server mysql 源码安装方式: http://www.cnblogs.com/linhaifeng/articles/7126847.html # Centos中也可使用下面方式安装 yum -y install mariadb-server mariadb
Windows版本linux
# 1. 下载: MySQL Community Server http://dev.mysql.com/downloads/mysql/ # 2. 解压 解压到你想要安装的指定目录下。 # 3. 添加环境变量 将MySQL解压后的bin目录添加到环境变量中。 # 4. 添加到windows系统服务 mysqld --install # 解除服务 mysqld --remove # 修改密码 mysqladmin -uroot -p '旧密码' '新密码' # 破解密码 0. 关闭mysql 1. mysqld --skip-grant-tables(须要管理员权限) 2. mysql (这样进去用户是ODBC, 经过**select user();**查看) 3. mysql -uroot -p (这样进去用户是root) 4. update mysql.user set password=password("新密码") where user="root" and host="localhost"; 5. flush privileges;
# 1. 修改配置文件(my.ini)。linux下默认在/etc/my.cnf [mysqld] default-character-set=utf8 [client] default-character-set=utf8 [mysql] default-character-set=utf8 ## mysql5.5以上,使用下述方式 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8 # 2. 重启mysql # 3. 查看编码信息 \s; or show variables like '%char%';
SQL语言主要用于存储数据、查询数据sql
# 1. DDL语言 数据库定义语言; 数据库、表、视图、索引、存储过程等。如CREATE、DROP、ALTER # 2. DML语言 数据库操纵语言; INSERT、DELETE、UPDATE、SELECT。 # 3. DCL语言 数据库控制语言; 如控制用户的访问权限GRANT、REVOTE。
# 1. 建立数据库 create database 数据库名 charset utf8; # 2. 命名规则 - 由字母、数字、下划线、@、#、$组成 - 区分大小写 - 惟一性 - 不能使用关键字 - 不能单独使用数字 - 最长128位 # 3. 经常使用操做 增 create database 数据库名 charset utf8; 查 show create database 数据库名; show database; 改 alter database 数据库名 charset gbk; 删 drop database 数据库名; 切换数据库 use 数据库名;
# 查看当前所在数据库 select database(); # 增 create table 表名( id int primary key not null auto_increment, name varchar(20); ); # 查 show create table 表名; show tables; desc 表名; # 改 修改表名 alter table 表名 rename 新表名; 增长字段 alter table 表名 add 字段名 数据类型[完整性约束条件...] alter table 表名 add 字段名 数据类型[完整性约束条件...] first; alter table 表名 add 字段名 数据类型[完整性约束条件...] after 字段名; 修改字段 alter table 表名 modify name char(22); alter table 表名 change name username varchar(20); 修改存储引擎 alter table 表名 engine=innodb; 删除字段 alter table 表名 drop 字段名; # 删 drop table 表名;
MariaDB [(none)]> create database db1 charset utf8; Query OK, 1 row affected (0.031 sec) MariaDB [(none)]> use db1; Database changed MariaDB [db1]> create table t1( -> id int, -> name varchar(50), -> sex enum("male", "female"), -> age int(3) -> ); Query OK, 0 rows affected (0.056 sec) MariaDB [db1]> desc t1; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | sex | enum('male','female') | YES | | NULL | | | age | int(3) | YES | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 4 rows in set (0.033 sec) # 增 insert 表名(id, name) values(1, "Python"), (2, 'JAVA'); insert into 表名(id, name) values(1, "Python"), (2, 'JAVA'); # 查 select * from 表名; select id, name from 表名; # 改 update 表名 set name="Golang"; update 表名 set name="Golang" where id=1; # 删 delete from 表名;(这样会清空整张表,可是不建议这么作,由于不会将自增加的id从头开始。清空表应该使用truncate 表名) delete from 表名 where id=1;
存储引擎就是表的类型。数据库
查看数据库支持的引擎 show engines; 指定表类型/存储引擎 create table 表名(id int, name varchar(20)) engine=innodb;
只复制表结构 create table 新表名 select * from 旧表名 where 1=2; or create table 新表名 like 旧表名; 复制表结构和数据 create table 新表名 select * from 旧表名;
# 建立本地帐号 create user "user"@"localhost" identified by "pwd"; # 建立远程帐号 create user 'user'@'ip' identified by "pwd"; create user 'user'@'xxx.xxx.xx.%' identified by "pwd"; craete user 'user'@'%' identified by 'pwd';
受权
grant all on . to 'user'@'localhost';
grant select on . to 'user'@'localhost';windows
回收权限
revoke select on . from 'user'@'localhost';服务器
查看帐号
select * from mysql.user\G;
select * from mysql.db\G;
select * from mysql.tables_priv\G;
select * from mysql.columns_priv\G;架构
char必定比varchar更占空间吗?
并非。由于varchar须要有指示当前长度的bytes位,因此当你要存储的数据正好在存储长度的临界值时,会出现varchar比char更占空间的状况。socket
```sqlide
create table dep(
id int primary key auto_increment,
name char(10),
comment char(50)
);
create table 表名(
id int primary key auto_increment,
name char(10),
sex enum('male', 'female'),
dep_id int,
constraint fk_dep foreign key(dep_id) references dep(id)
on delete cascade on update cascade # 有这一行才能保证删除或更新被关联表中的数据时能成功。
);