MySql-Day-01

MySql

  • 可以理解數據庫的概念
  • 可以安裝MySQL數據庫
  • 可以啓動,關閉及登陸MySQL
  • 可以使用SQL語句操做數據庫
  • 可以使用SQL語句操做表結構
  • 可以使用SQL語句進行數據的添加修改和刪除的操做
  • 可以使用SQL語句添加約束

1、數據庫介紹

1.一、數據庫概念

  • 什麼是數據庫mysql

    ​ 數據庫就是存儲數據的倉庫,其本質是一個文件系統,數據按照特定的格式將數據存儲起來,用戶能夠對數據庫中的數據進行增長,修改,刪除及查詢操做。web

  • 什麼是數據庫管理系統面試

    ​ 數據庫管理系統(DataBase Management System,DBMS):指一種操做和管理數據庫的大型軟件,用於創建、使用和維護數據庫,對數據庫進行統一管理和控制,以保證數據庫的安全性和完整性。用戶經過數據庫管理系統訪問數據庫中表內的數據。sql

  • 數據庫與數據庫管理系統的關係數據庫

1.二、數據庫表

​ 數據庫中以表爲組織單位存儲數據。windows

​ 表相似Java類,每一個字段都有對應的數據類型。安全

用Java程序來與關係型數據對比,就會發現如下對應關係。服務器

  • 類----------表
  • 類中屬性----------表中字段
  • 對象----------記錄

1.三、表數據

​ 根據表字段所規定的數據類型,咱們能夠向其中填入一條條的數據,而表中的每條數據相似類的實例對象。表中的一行一行的信息咱們稱之爲記錄。工具

  • 表記錄與Java類對象的對應關係

1.四、常見數據庫

​ 常見的數據庫管理系統編碼

  • MYSQL:開源免費的數據庫,小型的數據庫。已經被Oracle收購了。MySQL6.x版本也開始收費。
  • Oracle:收費的大型數據庫,Oracle公司的產品。Oracle收購SUN公司,收購MYSQL。
  • DB2:IBM公司的數據庫產品,收費的。常應用在銀行系統中。
  • SQLServer:MicroSoft公司收費的中型的數據庫。C#、.net等語言常使用。
  • SyBase:已經淡出歷史舞臺。提供了一個很是專業數據建模的工具PowerDesigner。
  • SQLite:嵌入式的小型數據庫,應用在手機端。

​ 經常使用數據庫:MYSQL、Oracle。

​ 這裏使用MySQL數據庫。MySQL中能夠有多個數據庫,數據庫是真正存儲數據的地方。

2、MySql數據庫

2.一、MySql安裝

  • 安裝(參考MySQL安裝圖解.doc)

​ 安裝後,MySQL會以windows服務的方式爲咱們提供數據存儲功能。開啓和關閉服務的操做:

​ 右鍵點擊個人電腦 → 管理 → 服務 → 找到MySQL服務開啓或中止。

​ 也能夠在DOS窗口,經過命令完成MySQL服務的啓動和中止(必須以管理員身份運行cmd命令窗口)。

2.二、登陸MySQL數據庫

​ MySQL是一個須要帳戶名密碼登陸的數據庫,登錄後使用,它提供了一個默認的root帳號,使用安裝時設置的密碼便可登陸。

格式1:cmd>mysql –u用戶名 –p密碼

例如:mysql -uroot –proot
格式2:cmd>mysql--host=ip地址--user=用戶名--password=密碼

例如:mysql--host=127.0.0.1--user=root--password=root

3、SQL語句

3.1 、SQL概述

SQL語句介紹

​ 數據庫是不認識Java語言的,可是咱們一樣要與數據庫交互,這時須要使用到數據庫認識的語言SQL語句,它是數據庫的代碼。結構化查詢語言(Structured Query Language)簡稱SQL,是關係型數據庫管理系統都須要遵循的規範。不一樣的數據庫生產廠商都支持SQL語句,但都有特有內容。

SQL語句分類

  • SQL分類:
    • 數據定義語言:簡稱DDL(Data Definition Language),用來定義數據庫對象:數據庫、表、列等。關鍵字:create、alter、drop等。
    • 數據操做語言:簡稱DML(Data Manipulation Language),用來對數據庫中表的記錄進行更新。關鍵字:insert、delete、update等。
    • 數據控制語言:簡稱DCL(Data Control Language),用來定義數據庫的訪問權限和安全級別及建立用戶。
    • 數據查詢語言:簡稱DQL(Data Query Language),用來查詢數據庫中表的記錄。關鍵字:select、from、where等。

SQL通用語法

  • SQL語句能夠單行或多行書寫,以分號結尾。
  • 可以使用空格和縮進來加強語句的可讀性。
  • MySQL數據庫的SQL語句不區分大小寫,關鍵字建議使用大寫。
    • 例如:SELECT * FROM user。
  • 一樣可使用/**/的方式完成註釋。
  • MySQL中的咱們常使用的數據類型以下:
類型名稱 說明
int(Integer) 整數類型.
double 小數類型.
decimal(m,d) 指定整數位與小數位長度的小數類型.
date 日期類型,格式爲yyyy-MM-dd,包含年月日,不包含時分秒.
datetime 日期類型,格式爲YYYY-MM-DD HH:MM:SS,包含時分秒.
timestamp 日期格式,時間戳.
varchar(M) 文本類型,M爲0 ~ 65535 之間的整數.

3.二、DDL之數據庫操做:database

建立數據庫

格式:

create database 數據庫名;
create database 數據庫名 character set 字符集;

例如:

#建立數據庫數據庫中數據的編碼採用的是安裝數據庫時指定的默認編碼utf8
CREATE DATABASE webdb_1;
#建立數據庫並指定數據庫中數據的編碼
CREATE DATABASE webdb_2 CHARACTER SET utf8;

查看數據庫

查看數據庫MySQL服務器中的全部的數據庫:

show databases;

查看某個數據庫的定義的信息:

show create database 數據庫名;

例如:

show create database webdb_1;

刪除數據庫

drop database 數據庫名稱;

例如:

drop database webdb_2;

使用數據庫

查看正在使用的數據庫:

select database();

其餘的數據庫操做命令切換數據庫:

use 數據庫名;

例如:

use webdb_1;

3.三、 DDL之表操做:table

建立表

格式:

create table 表名(
	字段名類型(長度)[約束],
	字段名類型(長度)[約束],
	...
);
類型:
	varchar(n)	字符串
	int			整形
	double		浮點
	date		時間
	timestamp	時間戳
約束:(詳情查看第四章)
	primary key 主鍵,被主鍵修飾字段中的數據,不能重複、不能爲null。

例如:建立分類表

CREATE TABLE category(
	cid INT primary key, #分類ID
	cname VARCHAR(100) #分類名稱
);

查看錶

  • 查看數據庫中的全部表:
格式: show tables;
  • 查看錶結構:
格式: desc 表名;
例如: desc category;

刪除表

  • 格式:drop table 表名;
例如: drop table category;

修改表結構格式

  • alter table 表名 add 列名類型(長度) [約束];
    做用:修改表添加列。
例如:#一、爲分類表添加一個新的字段爲分類描述 varchar(20)
ALTER TABLE category ADD 'desc' VARCHAR(20);
  • alter table 表名 modify 列名類型(長度)約束;
    做用:修改表修改列的類型長度及約束。
例如:#二、爲分類表的描述字段進行修改,類型 varchar(50) 添加約束notnull
ALTER TABLE category MODIFY 'desc' VARCHAR(50) NOT NULL;
  • alter table 表名 change 舊列名 新列名 類型(長度)約束;

    做用:修改表修改列名。

例如:#三、爲分類表的分類名稱字段進行更換更換爲 description varchar(30)
ALTER TABLE category CHANGE 'desc' description VARCHAR(30);
  • alter table 表名 drop 列名;
    做用:修改表刪除列。
例如:#四、刪除分類表中description這列
ALTER TABLE category DROP description;
  • rename table 表名 to 新表名;
    做用:修改表名。
例如:#五、爲分類表 category 更名成 category2
RENAME TABLE category TO category2;
  • alter table 表名 character set 字符集(瞭解);
    做用:修改表的字符集。
例如:#六、爲分類表 category 的編碼表進行修改,修改爲gbk
ALTER TABLE category CHARACTER SET gbk;

3.四、DML數據操做語言

插入表記錄:insert

  • 語法:
--向表中插入某些字段
insert into 表 (字段1,字段2,字段3..) values (值1,值2,值3..);
--向表中插入全部字段,字段的順序爲建立表時的順序。
insert into 表 values (值1,值2,值3..);
  • 注意:
  • 值與字段必須對應,個數相同,類型相同
  • 值的數據大小必須在字段的長度範圍內
  • 除了數值類型外,其它的字段類型的值必須使用引號引發。(建議單引號)
  • 若是要插入空值,能夠不寫字段,或者插入null。
  • 例如:
INSERT INTO category (cid,cname) VALUES ('c001','電器');
INSERT INTO category (cid,cname) VALUES ('c002','服飾');
INSERT INTO category (cid,cname) VALUES ('c003','化妝品');
INSERT INTO category (cid,cname) VALUES ('c004','書籍');
INSERT INTO category (cid) VALUES ('c005');
INSERT INTO category (cname,cid) VALUES ('耗材','c006');

更新表記錄:update

​ 用來修改指定條件的數據,將知足條件的記錄指定列修改成指定值。

  • 語法:
    更新全部記錄的指定字段
update 表名 set 字段名=值,字段名=值,...;

​ 更新符合條件記錄的指定字段

update 表名 set 字段名=值,字段名=值,...where條件;
  • 注意:
    • 列名的類型與修改的值要一致.
    • 修改值得時候不能超過最大長度.
    • 除了數值類型外,其它的字段類型的值必須使用引號引發

刪除記錄:delete

  • 語法:

    delete from 表名 [where條件];

3.五、DOS操做數據亂碼解決

咱們在dos命令行操做中文時,會報錯

insert into category (cid,cname) values (‘c010’,’中文’);
ERROR1366 (HY000): Incorrect string value:'\xB7\xFE\xD7\xB0' for column 'cname' at row 1

錯誤緣由:由於 mysql 的客戶端設置編碼是 utf8,而系統的 cmd 窗口編碼是 gbk
一、 查看MySQL內部設置的編碼

show variables like 'character%'; 查看全部mysql的編碼

二、須要修改client、connection、results的編碼一致(GBK編碼)
解決方案1:在cmd命令窗口中輸入命令,此操做當前窗口有效,爲臨時方案。

set names gbk;

解決方案2:安裝目錄下修改my.ini文件,重啓服務全部地方生效。

4、SQL約束

4.1 主鍵約束

PRIMARY KEY 約束惟一標識數據庫表中的每條記錄。

  • 主鍵必須包含惟一的值。
  • 主鍵列不能包含 NULL 值。
  • 每一個表都應該有一個主鍵,而且每一個表只能有一個主鍵。

添加主鍵約束

方式一:建立表時,在字段描述處,聲明指定字段爲主鍵 :

CREATE TABLE persons
(
	id_p int PRIMARY KEY,
	lastname varchar(255),
	firstname varchar(255),
	address varchar(255),
	city varchar(255)
) ;

方式二:建立表時,在constraint約束區域,聲明指定字段爲主鍵:

  • 格式: [constraint 名稱] primary key (字段列表)
  • 關鍵字constraint能夠省略,若是須要爲主鍵命名,constraint不能省略,主鍵名稱通常沒用。
  • 字段列表須要使用小括號括住,若是有多字段須要使用逗號分隔。聲明兩個以上字段爲主鍵,咱們稱爲聯合主鍵。
CREATE TABLE persons
( 
    firstname varchar(255),
	lastname varchar(255),
	address varchar(255),
	city varchar(255),
	CONSTRAINT pk_personID PRIMARY KEY (firstname,lastname)
) ;

方式三:建立表以後,經過修改表結構,聲明指定字段爲主鍵:

  • 格式: ALTER TABLE persons ADD [CONSTRAINT 名稱] PRIMARY KEY (字段列表)
CREATE TABLE persons
(
	firstname varchar(255),
	lastname varchar(255),
	address varchar(255),
	city varchar(255)
)
ALTER TABLE persons ADD PRIMARY KEY (firstname,lastname)

刪除主鍵約束

如需撤銷 PRIMARY KEY 約束,請使用下面的 SQL:

ALTER TABLE persons DROP PRIMARY KEY;

4.2 自動增加列

咱們一般但願在每次插入新記錄時,數據庫自動生成字段的值。
咱們能夠在表中使用 auto_increment(自動增加列)關鍵字,自動增加列類型必須是整形,自動增加列必須爲鍵(通常是主鍵)。

  • 下列 SQL 語句把 "persons" 表中的 "p_id" 列定義爲 auto_increment 主鍵
CREATE TABLE persons
(
	p_id int PRIMARY KEY AUTO_INCREMENT,
	lastname varchar(255),
	firstname varchar(255),
	address varchar(255),
	city varchar(255)
);
  • 向persons添加數據時,能夠不爲p_id字段設置值,也能夠設置成null,數據庫將自動維護主鍵值:
INSERT INTO persons (firstname,lastname) VALUES ('Bill','Gates')
INSERT INTO persons (p_id,firstname,lastname) VALUES (NULL,'Bill','Gates');
  • 擴展:默認AUTO_INCREMENT 的開始值是 1,若是但願修改起始值,請使用下列 SQL 語法:
ALTER TABLE persons AUTO_INCREMENT=100;
  • 面試題

問:針對auto_increment ,刪除表中全部記錄使用 delete from 表名 或使用 truncate table 表名,兩者有什麼區別?

刪除方式:
delete 一條一條刪除,不清空auto_increment記錄數。
truncate 直接將表刪除,從新建表,auto_increment將置爲零,重新開始。

4.3 非空約束

NOT NULL 約束強制列不接受 NULL 值。
NOT NULL 約束強制字段始終包含值。這意味着,若是不向字段添加值,就沒法插入新記錄或者更新記錄。

  • 下面的 SQL 語句強制 "id_p" 列和 "lastname" 列不接受 NULL 值:
CREATE TABLE persons
(
	id_p int NOT NULL,
	lastname varchar(255) NOT NULL,
	firstname varchar(255),
	address varchar(255),
	city varchar(255)
);

4.4 惟一約束

UNIQUE 約束惟一標識數據庫表中的每條記錄。 UNIQUE 和 PRIMARY KEY 約束均爲列或列集合提供了惟一性的保證。 PRIMARY KEY 擁有自動定義的 UNIQUE 約束。 請注意,每一個表能夠有多個 UNIQUE 約束,可是每一個表只能
有一個 PRIMARY KEY 約束。

添加惟一約束

與主鍵添加方式相同,共有3種

  • 方式一:建立表時,在字段描述處,聲明惟一:
CREATE TABLE persons
(
	id_p int NOT NULL,
	lastname varchar(255) NOT NULL,
	firstname varchar(255),
	address varchar(255),
	city varchar(255)
);
  • 方式二:建立表時,在約束區域,聲明惟一:
CREATE TABLE persons
( 
	id_p int,
	lastname varchar(255) NOT NULL,
	firstname varchar(255),
	address varchar(255),
	city varchar(255),
	CONSTRAINT 名稱UNIQUE (Id_P)
) ;
  • 方式三:建立表後,修改表結構,聲明字段惟一:
ALTER TABLE persons ADD [CONSTRAINT 名稱] UNIQUE (Id_P);

刪除惟一約束

  • 如需撤銷 UNIQUE 約束,請使用下面的 SQL:
ALTER TABLE persons DROP INDEX 名稱;
  • 若是添加惟一約束時,沒有設置約束名稱,默認是當前字段的字段名。

第5章 MySQL數據庫密碼重置(擴展)

一、中止mysql服務器運行輸入services.msc 中止mysql服務。

二、 在cmd下,輸入mysqld --console --skip-grant-tables 啓動服務器,出現一下頁面,不要關閉該窗口。

三、 新打開cmd,輸入mysql -uroot 不須要密碼。

use mysql;
update user set password=password('abc') WHERE user='root';

四、關閉兩個cmd窗口。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息