資料庫 mysql 安裝: linux centos7: 在CentOS中預設安裝有MariaDB,這個是MySQL的分支,但為了需要,還是要在系統中安裝MySQL,而且安裝完成之後可以直接覆蓋掉MariaDB。 安裝mysql 1.下載並安裝mysql官方的yum Repository 使用yum ...
資料庫------mysql
安裝:
linux----centos7:
在CentOS中預設安裝有MariaDB,這個是MySQL的分支,但為了需要,還是要在系統中安裝MySQL,而且安裝完成之後可以直接覆蓋掉MariaDB。
安裝mysql
1.下載並安裝mysql官方的yum Repository
[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
使用yum進行安裝:
[root@localhost ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm
2.開始安裝myql伺服器:
[root@localhost ~]# yum -y install mysql-community-server
這一步會花費不少的時間,請耐心等待,安裝完之後就會覆蓋掉之前的mariadb
mysql資料庫的設置:
3.啟動mysql:
[root@localhost ~]# systemctl start mysqld.service
查看mysql運行狀態:
[root@localhost ~]# systemctl status mysqld.service
4.找出mysql的root用戶密碼,通過在日誌文件中查找:
[root@localhost ~]# grep "password" /var/log/mysqld.log
5.進入資料庫:
[root@localhost ~]# mysql -uroot -p
輸入上面查詢到的初始密碼,之後不能做任何事情,只有在修改了預設密碼之後才能夠操作資料庫:
6.修改密碼:
常見的修改密碼的方法有:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
mysql> set password for 'root@localhost'=password('Newpassword4!')
但是都會遇到一個問題:
這時候我們必須要用其他的方法:
mysql> set password=password('123456')
此時還是會遇到一個新的問題:
新密碼設置過於簡單,這個原因是mysql有密碼設置的規範,具體是與validate_password_policy的值有關
所以我們先設置一個符合規則的密碼,包含大小寫數字和符號的密碼:
這樣我們才能夠進行查看密碼規則和其他的操作:
或者使用如下的命令修改密碼:
[root@localhost ~]#mysqladmin -u root password "new_password";
MySQL完整的初始密碼規則可以通過如下命令查看:
mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password_check_user_name | OFF | | validate_password_dictionary_file | | | validate_password_length | 8 | | validate_password_mixed_case_count | 1 | | validate_password_number_count | 1 | | validate_password_policy | MEDIUM | | validate_password_special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.01 sec)
validate_password_policy:密碼策略,預設為MEDIUM策略
validate_password_dictionary_file:密碼策略文件,策略為STRONG才需要
validate_password_length:密碼最少長度
validate_password_mixed_case_count:大小寫字元長度,
至少1個 validate_password_number_count :數字至少1個
validate_password_special_char_count:特殊字元至少1個 上述參數是預設策略MEDIUM的密碼檢查規則。
我們修改一下裡面的參數:
mysql> set global validate_password_policy=0; mysql> set global validate_password_length=4;
這樣我們就能夠設置簡單的密碼:1234,或者root
7.配置預設編碼:uft8
首先我們看一下mysql預設的編碼:
mysql> show variables like '%character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
修改/etc/my.cnf配置文件,在[mysqld]下添加編碼配置,如下所示:
[mysqld] character_set_server=utf8
init_connect='SET NAMES uft8'
重新啟動mysql服務,查看看資料庫編碼,如下所示:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
8.設置mysql開機啟動:
[root@localhost ~]# systemctl enable mysqld
[root@localhost ~]# systemctl daemon-reload
預設配置文件路徑:
配置文件:/etc/my.cnf
日誌文件:/var/log//var/log/mysqld.log
服務啟動腳本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
windows下安裝mysql:
windows上安裝mysql相對來說要簡單的多,只要下載mysql對應的安裝包,
MySQL Installer 下載
mysql-installer-community-5.7.19.0.msi:https://dev.mysql.com/downloads/file/?id=471661
然後運行exe文件進行安裝,需要註意的如下:
一般我們選擇Custom;
next之後我們會看到下麵這個界面:
有的時候他會下載失敗,install fail,:The action ‘Install’ for product ‘MySQL Server 5.7.19’ failed.
這是因為我們電腦裡面沒有安裝Visual Studio2013運行庫,
32位的Visual C++ Redistributable Packages for Visual Studio 2013!!!註意是32位的。即使你的電腦是64位的
安裝網址: https://www.microsoft.com/zh-cn/download/details.aspx?id=40784
之後就設置登錄密碼,順利安裝成功。
安裝成功,進行驗證,開始菜單中打開MySQL命令行工具
mysql數據類型
分為:數值,時間和字元(串)類型
數值類型:
類型 | 大小 | 範圍(有符號) | 範圍(無符號) | 用途 |
---|---|---|---|---|
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位元組 | 極大文本數據 |
常用操作:(命令結束之後一定要加分號)
查看資料庫:show databases;
進入mysql資料庫:use mysql;
查看這個庫中有什麼表:show tables;
查看表的結構:desc 表名;or show columns from 數據表
查看表中數據:select * from 表名 (\G);加上\G,就變成了豎著的顯示
創建一個新用戶:
use mysql; mysql庫裡面有mysql自帶的用戶表,它存了賬戶的所有信息
我們查詢mysql中的user表的User欄位,就可以看到你現在的資料庫中有多少個用戶
grant all on test.* to 'xiaoming'@'localhost' identified by 'xiaoming123'
all:分配給用戶的許可權,有Select,Insert,Update,Delete,Create,Drop,Re load,Shutdown,Process,File,Grant,References,Index,Alter
test.*:為資料庫test的所有表分配的用戶。所有就是*.*
‘xiaoming’@'localhost' indentified by 'xiaoming123':用戶名為xiaoming,密碼xiaoming123
查看創建用戶的許可權:show grants for 用戶名
創建資料庫:create database 資料庫名 charset utf8
查看創建的資料庫的編碼:show create database 資料庫名
刪除資料庫:drop database 資料庫名
創建數據表:
create table student( id int auto_increment, name char(32) not null, age int not null, register_date date not null, primary key(id) );
如果你不想欄位為 NULL 可以設置欄位的屬性為 NOT NULL, 在操作資料庫時如果輸入該欄位的數據為NULL ,就會報錯。
AUTO_INCREMENT定義列為自增的屬性,一般用於主鍵,數值會自動加1。
PRIMARY KEY關鍵字用於定義列為主鍵。 同時如果使用多列來定義主鍵,列間以逗號分隔。
插入數據:
insert into student(name,age,register_date) values ("xiaoming",22,"1996-09-20");
查詢數據:
SELECT column_name,column_name FROM table_name [WHERE Clause][LIMIT N] [OFFSET M ]
查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,並使用WHERE語句來設定查詢條件
使用星號(*)代替其他欄位,SELECT語句會返回表的所有欄位數據
使用 WHERE 語句來包含任何條件
LIMIT 屬性設定返回的記錄數
OFFSET指定SELECT語句開始查詢的數據偏移量。預設情況下偏移量為0,
OFFSET不能單獨使用
offset必須在limit後面添加
where子句:
模糊查詢:like: binary '%Li' 只匹配大寫
更新數據(Update):
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
刪除數據(delete):
DELETE FROM table_name [WHERE Clause]
mysql排序:
SELECT field1, field2,...fieldN table_name1, table_name2... ORDER BY field1, [field2...] [ASC [DESC]]
使用 ASC 或 DESC 關鍵字來設置查詢結果是按升序或降序排列。 預設情況下,它是按升序排列。
mysql的group by:
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
統計總數:在最後加一個with rollup
mysql alter命令:我們需要修改數據表名或者修改數據表欄位時,就需要使用到MySQL ALTER命令。
刪除,添加或修改表欄位
alter table student drop register_date; #從student表刪除register_date欄位 alter table student add telephere int(11) not null; #添加phone欄位
alter table student modify sex enum("M","F") not null; #修改sex
修改欄位類型和名稱:(modify和change)
modify修改欄位的類型,如把char(1)變成char(10):
alter table student modify sex int(10)
change語句:在使用change之後緊跟著的是要修改的欄位名,然後制定新欄位名及類型:
alter table student change sex gender char(32) default 'M';
修改表名:
alter table student rename to student1;
關於外鍵“:用於關聯兩個表:
我們創建第二個表:
create table study_record( id int not null auto_increment, day int not null, status char(32) not null default 'YES', stu_id int(11) not null, primary key(`id`), key `fk_student_key` (`stu_id`), constraint `fk_student_key` foreign key (`stu_id`) references `student` (`id`));
首先我們看一下student表中的數據:
現在我們為study_record插入數據
但是當我們輸入的stu_id不在student表中的id範圍時:
Mysql 連接(left join, right join, inner join ,full join)
JOIN 按照功能大致分為如下三類:
- inner join(內連接,或等值連接):獲取兩個表中欄位匹配關係的記錄。
- left join(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
- right join(右連接): 與 right join 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。
首先我們創建兩個數據表:
mysql> select * from A; +---+ | a | +---+ | 1 | | 2 | | 3 | | 4 | +---+
mysql> select * from B; +---+ | b | +---+ | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | +---+
inner join:內連接,就是查詢出兩個表的共同元素(交集)
select * from A inner join B on A.a = B.b; select A.*,B.* from A,B where A.a = B.b; +---+---+ | a | b | +---+---+ | 3 | 3 | | 4 | 4 | +---+---+
left join:就是查詢出兩個表的不同元素(差集)
mysql> select * from A left join B on A.a = B.b; +---+------+ | a | b | +---+------+ | 3 | 3 | | 4 | 4 | | 1 | NULL | | 2 | NULL | +---+------+
先把A中的數據取出來,然後看B中有沒有相同的數據,如果有就對應取出,沒有的數據就用NULL
right join:
mysql> select * from A right join B on A.a = B.b; +------+---+ | a | b | +------+---+ | 3 | 3 | | 4 | 4 | | NULL | 5 | | NULL | 6 | | NULL | 7 | | NULL | 8 | +------+---+
效果和select * from B left join A on A.a=B.b一樣的效果
full join:
(mysql不直接支持),即select * from A full join B on A.a = B.b會報錯
但是:
mysql> select * from A left join B on A.a = B.b union select * from A right join B on A.a = B.b; +------+------+ | a | b | +------+------+ | 3 | 3 | | 4 | 4 | | 1 | NULL | | 2 | NULL | | NULL | 5 | | NULL | 6 | | NULL | 7 | | NULL | 8 | +------+------+ 8 rows in set (0.00 sec)
通過這種方法間接的實現了full join
事務
MySQL 事務主要用於處理操作量大,複雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣就需要用到多條sql語句,但是如果在執行sql語句中突然死機斷電,還沒有把所有語句執行完,那就會有問題。這樣,這些資料庫操作語句就構成一個事務!
在MySQL中只有使用了Innodb資料庫引擎的資料庫或表才支持事務,事務處理可以用來維護資料庫的完整性,保證成批的SQL語句要麼全部執行,要麼全部不執行。同時事務用來管理insert,update,delete語句
事務的4個條件(ACID):
Atomicity(原子性):一組事務,要麼成功;要麼撤回。
Consistency(穩定性):有非法數據(外鍵約束之類),事務撤回。
Isolation(隔離性):事務獨立運行。一個事務處理後的結果,影響了其他事務,那麼其他事務會撤回。事務的100%隔離,需要犧牲速度。
Durability(可靠性):軟、硬體崩潰後,InnoDB數據表驅動會利用日誌文件重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什麼時候把事務保存到日誌里。
mysql> select * from student; +----+-----------+-----+---------------+--------+ | id | name | age | register_date | gender | +----+-----------+-----+---------------+--------+ | 1 | xiaoming | 22 | 1996-09-20 | NULL | | 3 | xiaoliang | 21 | 1995-09-25 | NULL | | 5 | linhuahua | 27 | 1993-06-07 | NULL | | 9 | xiaoming | 26 | 1993-06-02 | NULL | | 11 | haha | 26 | 2011-01-01 | M | +----+-----------+-----+---------------+--------+ 5 rows in set (0.00 sec) mysql> begin; #開始一個事務 mysql> insert into student (name,age,register_date,gender) values("wangsen",25,"2016-09-22","M"); mysql> insert into student (name,age,register_date,gender) values("wangqing",26,"2016-09-12","F"); mysql> select * from student; +----+-----------+-----+---------------+--------+ | id | name | age | register_date | gender | +----+-----------+-----+---------------+--------+ | 1 | xiaoming | 22 | 1996-09-20 | NULL | | 3 | xiaoliang | 21 | 1995-09-25 | NULL | | 5 | linhuahua | 27 | 1993-06-07 | NULL | | 9 | xiaoming | 26 | 1993-06-02 | NULL | | 11 | haha | 26 | 2011-01-01 | M | | 12 | wangsen | 25 | 2016-09-22 | M | | 13 | wangqing | 26 | 2016-09-12 | F | +----+-----------+-----+---------------+--------+ 7 rows in set (0.00 sec) mysql>rollback; 回滾 , 這樣數據是不會寫入的 mysql> select * from student; +----+-----------+-----+---------------+--------+ | id | name | age | register_date | gender | +----+-----------+-----+---------------+--------+ | 1 | xiaoming | 22 | 1996-09-20 | NULL | | 3 | xiaoliang | 21 | 1995-09-25 | NULL | | 5 | linhuahua | 27 | 1993-06-07 | NULL | | 9 | xiaoming | 26 | 1993-06-02 | NULL | | 11 | haha | 26 | 2011-01-01 | M | +----+-----------+-----+---------------+--------+ 5 rows in set (0.00 sec)
如果一切操作正常的話,用mysql> commit;進行提交就可以了,這個時候你所插入的數據就能夠正常的插入到資料庫中了
索引
MySQL索引的建立對於MySQL的高效運行是很重要的,索引可以大大提高MySQL的檢索速度。
數據表可以有很多的欄位,但是主鍵只有一個,索引可以有多個,比如:個人信息表,每個人可以包含多個欄位:姓名,年齡,性別,生日等等,一個個人信息有50列,我們最關註的也就是姓名和身份證號,我們可以對這兩個欄位做兩個索引。索引就是通過哈希的形式把一列的數據轉成數字,然後再排序,通過二分查找查找數據。這樣檢索速度就提高了。
索引分單列索引和組合索引。
單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。
組合索引,即一個索引包含多個列。
創建索引時,你需要確保該索引是應用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。
實際上,索引也是一張表,該表保存了主鍵與索引欄位,並指向實體表的記錄。
索引的缺點:
雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件。建立索引會占用磁碟空間的索引文件
查看一個表的索引:
show index from student; +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | student | 0 | PRIMARY | 1 | id | A | 7 | NULL | NULL | | BTREE | | | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
一個表中的主鍵自動就是索引,主鍵就是一種索引,預設的
創建索引:
CREATE INDEX indexName ON table(username(length));
mysql> create index index_name on student(name(32)); mysql> show index from student; +---------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +---------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | student | 0 | PRIMARY | 1 | id | A | 6 | NULL | NULL | | BTREE | | | | student | 1 | index_name | 1 | name | A | 4 | NULL | NULL | | BTREE | | | +---------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 2 rows in set (0.00 sec)
在創建表的時候就添加索引:
create table tablename( id int not null, username varchar(16) not null, index [indexName] (username(length)) );
刪除索引:
drop index [indexName] on tablename
唯一索引:
索引列的值必須唯一,但是允許有空值。如果是組合索引,則列值的組合必須唯一。
創建,刪除索引等操作就是在前面的普通索引之前加一個unique:如創建唯一索引|:create unique index indexName on tablename(username(length))
以上就是mysql的一些基本操作,謝謝