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 # 有這一行才能保證刪除或更新被關聯表中的數據時能成功。

);

相關文章
相關標籤/搜索