什麼是數據庫mysql
數據庫就是存儲數據的倉庫,其本質是一個文件系統,數據按照特定的格式將數據存儲起來,用戶能夠對數據庫中的數據進行增長,修改,刪除及查詢操做。web
什麼是數據庫管理系統面試
數據庫管理系統(DataBase Management System,DBMS):指一種操做和管理數據庫的大型軟件,用於創建、使用和維護數據庫,對數據庫進行統一管理和控制,以保證數據庫的安全性和完整性。用戶經過數據庫管理系統訪問數據庫中表內的數據。sql
數據庫與數據庫管理系統的關係數據庫
數據庫中以表爲組織單位存儲數據。windows
表相似Java類,每一個字段都有對應的數據類型。安全
用Java程序來與關係型數據對比,就會發現如下對應關係。服務器
根據表字段所規定的數據類型,咱們能夠向其中填入一條條的數據,而表中的每條數據相似類的實例對象。表中的一行一行的信息咱們稱之爲記錄。工具
常見的數據庫管理系統編碼
經常使用數據庫:MYSQL、Oracle。
這裏使用MySQL數據庫。MySQL中能夠有多個數據庫,數據庫是真正存儲數據的地方。
安裝後,MySQL會以windows服務的方式爲咱們提供數據存儲功能。開啓和關閉服務的操做:
右鍵點擊個人電腦 → 管理 → 服務 → 找到MySQL服務開啓或中止。
也能夠在DOS窗口,經過命令完成MySQL服務的啓動和中止(必須以管理員身份運行cmd命令窗口)。
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
數據庫是不認識Java語言的,可是咱們一樣要與數據庫交互,這時須要使用到數據庫認識的語言SQL語句,它是數據庫的代碼。結構化查詢語言(Structured Query Language)簡稱SQL,是關係型數據庫管理系統都須要遵循的規範。不一樣的數據庫生產廠商都支持SQL語句,但都有特有內容。
類型名稱 | 說明 |
---|---|
int(Integer) | 整數類型. |
double | 小數類型. |
decimal(m,d) | 指定整數位與小數位長度的小數類型. |
date | 日期類型,格式爲yyyy-MM-dd,包含年月日,不包含時分秒. |
datetime | 日期類型,格式爲YYYY-MM-DD HH:MM:SS,包含時分秒. |
timestamp | 日期格式,時間戳. |
varchar(M) | 文本類型,M爲0 ~ 65535 之間的整數. |
格式:
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;
格式:
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 category;
例如:#一、爲分類表添加一個新的字段爲分類描述 varchar(20) ALTER TABLE category ADD 'desc' VARCHAR(20);
例如:#二、爲分類表的描述字段進行修改,類型 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);
例如:#四、刪除分類表中description這列 ALTER TABLE category DROP description;
例如:#五、爲分類表 category 更名成 category2 RENAME TABLE category TO category2;
例如:#六、爲分類表 category 的編碼表進行修改,修改爲gbk ALTER TABLE category CHARACTER SET gbk;
--向表中插入某些字段 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 表名 set 字段名=值,字段名=值,...;
更新符合條件記錄的指定字段
update 表名 set 字段名=值,字段名=值,...where條件;
語法:
delete from 表名 [where條件];
咱們在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文件,重啓服務全部地方生效。
PRIMARY KEY 約束惟一標識數據庫表中的每條記錄。
方式一:建立表時,在字段描述處,聲明指定字段爲主鍵 :
CREATE TABLE persons ( id_p int PRIMARY KEY, lastname varchar(255), firstname varchar(255), address varchar(255), city varchar(255) ) ;
方式二:建立表時,在constraint約束區域,聲明指定字段爲主鍵:
CREATE TABLE persons ( firstname varchar(255), lastname varchar(255), address varchar(255), city varchar(255), CONSTRAINT pk_personID PRIMARY KEY (firstname,lastname) ) ;
方式三:建立表以後,經過修改表結構,聲明指定字段爲主鍵:
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;
咱們一般但願在每次插入新記錄時,數據庫自動生成字段的值。
咱們能夠在表中使用 auto_increment(自動增加列)關鍵字,自動增加列類型必須是整形,自動增加列必須爲鍵(通常是主鍵)。
CREATE TABLE persons ( p_id int PRIMARY KEY AUTO_INCREMENT, lastname varchar(255), firstname varchar(255), address varchar(255), city varchar(255) );
INSERT INTO persons (firstname,lastname) VALUES ('Bill','Gates') INSERT INTO persons (p_id,firstname,lastname) VALUES (NULL,'Bill','Gates');
ALTER TABLE persons AUTO_INCREMENT=100;
問:針對auto_increment ,刪除表中全部記錄使用 delete from 表名 或使用 truncate table 表名,兩者有什麼區別?
刪除方式: delete 一條一條刪除,不清空auto_increment記錄數。 truncate 直接將表刪除,從新建表,auto_increment將置爲零,重新開始。
NOT NULL 約束強制列不接受 NULL 值。
NOT NULL 約束強制字段始終包含值。這意味着,若是不向字段添加值,就沒法插入新記錄或者更新記錄。
CREATE TABLE persons ( id_p int NOT NULL, lastname varchar(255) NOT NULL, firstname varchar(255), address varchar(255), city varchar(255) );
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);
ALTER TABLE persons DROP INDEX 名稱;
一、中止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窗口。