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