mysql介绍

数据库中几个重要的概念:

  • 数据: 描述事物特征的符号
  • 记录: 事物一系列典型的特征
  • 表: 就至关于一个文件
  • 库: 至关于一个文件夹
  • 经常使用的数据库管理软件(DBMS): MySQL, Oracle, SqlServer, DB2

MySQL介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下。MySQL是当前最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System, 关系型数据库管理系统)应用软件之一。html

MySQL是什么?

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语言主要用于存储数据、查询数据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 旧表名;

权限管理

  1. 建立帐号
# 建立本地帐号
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';
  1. 受权
    grant all on . to 'user'@'localhost';
    grant select on . to 'user'@'localhost';windows

  2. 回收权限
    revoke select on . from 'user'@'localhost';服务器

  3. 查看帐号
    select * from mysql.user\G;
    select * from mysql.db\G;
    select * from mysql.tables_priv\G;
    select * from mysql.columns_priv\G;架构

char和varchar

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 # 有这一行才能保证删除或更新被关联表中的数据时能成功。

);

相关文章
相关标签/搜索