mysql 修改库的校对集_mysql数据库的基本操作(增删改查、字符集、校对集)
MySQL數據庫概述
MySQL數據庫是經典的關系型數據庫管理系統,MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件。MySQL是一款由C和C++編寫的開放源碼的小型數據庫,它為多種編程語言提供了API。
關系型數據庫是建立在關系模型基礎上的數據庫,借助于集合代數等數學概念和方法來處理數據庫中的數據。現實世界中的各種實體和實體之間的各種聯系均用關系模型來表示。標準數據查詢語言SQL(Standard Query Lanague)就是一種基于關系數據的語言,這種語言執行對關系數據庫中的數據的檢索和操作。關系模型由關系數據結構、關系操作集合、關系完整性約束三部分組成。簡單來說,關系型數據庫,就是由多張能互相連接的二維行列表格組成的數據庫。
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。
簡單來說,關系模型指的就是二維表格模型,而一個關系型數據庫就是由二維表及其之間的聯系所組成的一個數據組織。
關系模型中常用的概念
關系:可以理解為一張二維表,每個關系都具有一個關系名,就是通常說的表名
元組:可以理解為二維表中的一行,在數據庫中經常被稱為記錄
屬性:可以理解為二維表中的一列,在數據庫中經常被稱為字段
域:屬性的取值范圍,也就是數據庫中某一列的取值限制
關鍵字:一組可以唯一標識元組的屬性,數據庫中常稱為主鍵,由一個或多個列組成
關系模式:指對關系的描述。其格式為:關系名(屬性1,屬性2, ... ... ,屬性N),在數據庫中稱為表結構。
數據庫事務
事務(Transaction)是由一系列對系統中數據進行訪問與更新的操作所組成的一個程序執行邏輯單元。可以認為事物就是一組不可分割的SQL語句。
事務的特性:也稱為ACID特性。即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。
1.原子性:原子性是指事務中包含的所有操作要么都做,要么都不做,保證數據庫是一致的。
2.一致性:一致性是指數據庫在事務操作前和事務處理后,其中的數據必須都滿足業務規則約束。
3.隔離性:隔離性是數據庫允許多個并發事務同時對齊數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。
4.持久性:持久性表示為,事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。
事務有三種模型:
1.隱式事務是指每一條數據操作語句都自動地成為一個事務,事務的開始是隱式的,事務的結束有明確的標記。
2.顯式事務是指有顯式的開始和結束標記的事務,每個事務都有顯式的開始和結束標記。
3.自動事務是系統自動默認的,開始和結束不用標記。
注:數據庫事務必須具備ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔離性,Durability持久性。
數據庫系統、數據庫管理系統和數據庫
數據庫系統(DataBase System)簡稱DBS,包括數據庫(DataBase)簡稱DB、數據庫管理系統(DataBase Management System)簡稱DBMS、應用系統、數據庫管理員(DataBase Administrator)簡稱DBA 。所以DBS是個大的概念 ,DB是專門存數據的集合 ,DBMS是由DBA對DB的查詢、更新、刪除、修改操作的。DBMS用來操縱和管理DB的軟件,用于建立、使用和維護DB。它對DB進行統一的管理和控制,以保證DB的安全性和完整性,用戶可以通過DBMS訪問DB中的數據,DBA也可以通過DBMS進行DB的維護工作,它可使多個應用程序和用戶擁有不同的方法在同時或不同時刻去建立、修改和詢問DB(也就是說DBMS可以將控制權發揮到極致(也就是所說的安全性))。 DB是長期存儲在計算機內的有組織、可共享的大量的數據集合。它可以供各種用戶共享,具有最小冗余度和較高的數據獨立性。DB(數據庫)是保存數據的容器,通常是一個文件或者一組文件,從SQL的角度看數據庫就是一個以某種有組織的方式存儲的數據集合。數據庫通常是保存在硬盤上的文件,但也可以不是,至于數據庫到底是什么其實并不重要,因為你并不直接訪問數據庫,你使用的是DBMS(數據庫管理系統),諸如Oracle、MySQL等,它替你訪問數據庫。
DBS中的"系統"是指能夠提供一系列數據庫相關服務組件的有機結合體。它應該包括:DB、DBMS(以及開發工具)、應用系統、DBA和用戶構成。所以聯系就是DBS包括DBMS和DB。Oracle就是數據庫管理系統,也稱之為關系型數據庫管理系統(Relation Database Manager System),簡稱RDBMS。
1.數據庫課程體系???
* 基礎階段: mysql數據庫的基本操作,以及一些高級操作(視圖、觸發器、函數、存儲過程等)和PHP操作mysql數據庫
* 優化階段: 如何提高數據庫效率,如索引,分表等
* 部署階段: 如何搭建真實的環境系統,如服務器集群,負載均衡
2.數據庫基礎知識???
* 什么是數據庫?
數據庫:database,存儲數據的倉庫;高效地存儲和處理數據的介質(磁盤和內存)
* 數據庫的分類
基于存儲介質的不同:分為關系型數據庫(SQL)和非關系型數據庫(NoSQL,Not only SQL)
* 數據庫產品:
關系型:
大型:oracle,DB2
中型:SQL server,MySQL等
小型:access等
非關系型:
memcached,mongodb,redis
* 兩種數據庫陣營的區別?
關系型數據庫:安全(保存磁盤基本不可能丟失),容易理解,比較浪費空間(二維表存儲)
非關系型數據庫:效率高,不安全(斷電丟失)
3.關系型數據庫?? ????
* 定義:是一種建立在關系模型(數學模型)上的數據庫
* 關系模型:一種所謂建立在關系上的模型。關系模型包含三個方面:
數據結構:數據存儲的問題,二維表(有行和列)
操作指令集合:SQL語句
完整性約束:表內數據約束,表與表之間約束(外鍵)
* 關系型數據庫的設計:
關系型數據庫:從需要存儲的數據需求中分析,如果是一類數據(實體)應該設計成一張二維表:表是由表頭(字段名:用來規定數據的名字)和數據部分組成(實際存儲的數據單元)
二維表:行和列
表頭
字段名1
字段名2
數據單元
數據1
數據2
以實際案例來進行處理:分析一個教學系統,講師負責教學,教學生,在教室教學生
(1)找出系統中所有存在的實體:講師表、學生表、班級表
(2)找出實體中應該存在的數據信息
講師:姓名,性別,年齡,工資
學生:姓名,性別,學號,學科
班級:班級名稱,教室編號
關系型數據庫:維護實體內部,實體與實體之間的聯系
實體內部聯系:每個學生由姓名,性別,學號,學科信息
姓名
性別
學號
學科
年齡
張三
男
001
java
20
李四
男
007
java
21
第二行的所有字段,都是在描述張三這個學生(內部聯系);第二列只能存儲性別(內部約束)。
關系型數據庫的特點之一:如果表中對應的某個字段沒有值,但是系統依然要分配空間。所以關系型數據庫比較浪費空間。
實體與實體之間的聯系:每個學生肯定屬于某個班級,每個班級一定由多個學生(一對多)
班級表
班級編號
班級名稱
A001
java教學一班
A002
java教學二班
學生表(在學生表中添加一個班級字段來指向班級)
姓名
性別
學號
學科
年齡
班級編號
張三
男
001
java
20
A001
李四
男
007
java
21
A002
4.關系型數據庫的一些關鍵字???
* 數據庫:database
* 數據庫系統:DBS(Database System):是一種虛擬系統,將多種內容關聯起來的稱呼
DBS = DBMS +DB
* DBMS(Database Management System)數據庫管理系統
* DBA(Database Administrator)數據庫管理員
* 行/記錄 row/record,本質是一個東西,都是指表中一行(一條記錄);
* 列/字段:column/field
5.SQL語言???
* SQL:Structured Query Language,結構化查詢語言(數據以查詢為主,99%都是在進行查詢操作)
* SQL分為三個部分:
- DDL:Data Definition Language,數據定義語言,用來維護存儲數據的結構(數據庫和表),
代表指令:create,drop,alter等??? 【操作數據庫和表結構】
- DML:Data Manipulation Language,數據操作語言,用來對數據進行操作【操作表記錄】
代表指令:insert,delete,update等;
DML內部又單獨有一個分類DQL,Data Query Language數據查詢語言,如select
- DCL:Data Control Language,數據控制語言,主要負責權限管理,代表指令:grant,revoke等
6.mysql數據庫?? ????
* mysql數據庫是一種c/s(客戶端/服務器)結構的軟件
* 交互方式:
1)客戶端連接? mysql[.exe] [-hlocalhost] [-p3306] -uroot -p123
2)發送SQL指令
3)服務器接收SQL指令,處理SQL指令,返回操作結果
4)客戶端接收結果,顯示結果
5)斷開連接? (exit? quit? \q)
7.mysql服務器數據對象---mysql的結構???
* 將mysql服務器內部對象分成了四層:
系統 DBMS --> 數據庫 DB --> 表 table --> 字段 field
8.SQL基本操作 增刪改查CRUD create read update delete???
* 將SQL的基本操作根據操作對象進行分類,分為三類:庫操作,表操作(字段),數據操作
* -- 雙中劃線+空格:單行注釋,也可以使用 #
* 庫操作:對數據庫的增刪改查
==================新增數據庫====================
- 新增數據庫 create database [if not exists] 數據庫名 [庫選項];
** 庫選項:用來約束數據庫
** 字符集設定:charset/character set 具體字符集
** 校對集設定:collate 具體校對集(數據比較的規則)
** 例子:create database mydb1 charset utf8;
** 創建中文數據庫(建議不要使用中文命名數據庫名)
set names gbk;
create database 中文 charset utf8;
** 如果數據庫名字和關鍵字(或保留字)重復,使用反引號
create database `database` charset utf8;
- 創建新的數據庫后,會在mysql安裝目錄的data文件夾下創建一個文件夾,名字就是數據庫名
每個數據庫下,有一個db.opt文件,保存了庫選項
default-character-set=utf8???? ==> 字符集
default-collation=utf8_general_ci?? ==>校對集,依賴字符集
==================查詢數據庫====================
- 查看所有數據庫 show databases;
- 查看指定部分的數據庫:模糊查詢
show databases like 'mydb_';? 下劃線_匹配一個字符
show databases like 'my%';???? %匹配任意個字符
show databases like 'information\_%';???? 使用\轉義
- 查看數據庫的創建語句
show create database 數據庫名;
==================修改數據庫====================
- 數據庫名字不可以修改
- 可以修改數據庫的庫選項:字符集和校對集(校對集依賴字符集)
alter database 數據庫名 charset [=] utf8;
alter database 數據庫名 [default] character set [=] utf8;
==================刪除數據庫====================
- 刪除數據庫 drop database [if exists] 數據庫名;
9.表操作(操作表結構)???
==================新增數據表====================
* 新增數據表
create table [if not exists] [數據庫名.]表名(
字段名字 數據類型,
字段名字 數據類型
)[表選項];
- if not exists:如果表不存在,創建之;如果已經存在,不創建;
-? 表選項:
字符集:charset/character set 具體字符集;
校對集:collate 具體校對集;
存儲引擎:engine 集體引擎;
- 例子:顯示指定表所屬的數據庫
CREATE TABLE [IF NOT EXISTS] test1.`tb_stu` (
`username` varchar(20) DEFAULT NULL,
`age` int DEFAULT NULL,
`password` varchar(50) DEFAULT NULL
) [ENGINE=MyISAM DEFAULT CHARSET=utf8];
- 例子:先進入某個數據庫環境,即隱式指定表所屬數據庫
use test1;
create table tb_stu1 (
username varchar(20),
age int
)charset utf8;
==================查看數據表====================
* 查看所有表 show tables;
* 模糊查詢 show tables like '%s';
* 查看表創建語句 show create table 表名;
show create table 表名\g
show create table 表名\G?? 將查到的結果旋轉90度變成縱向
* 查看表結構
desc/describe 表名;
show columns from 表名;
==================修改數據表====================
* 修改表名 rename table tb_student? to tb_stu
* 修改表選項
alter table tb_stu charset [=] utf8;
* 新增字段
alter table tb_stu add [column] (字段名 數據類型) [列屬性][位置];
- 位置:
first:第一個位置
after 字段名:
alter table tb_stu add (
sid int
)first;
* 修改字段類型 alter table 表名 modify 字段 數據類型 [列屬性][位置];
alter table tb_stu modify id varchar(32) after username;
* 修改列名和列類型? alter table 表名 change 原列名 新列名 列類型 [列屬性][位置];?? 可以同時修改列名和列類型
* 刪除字段
alter table 表名 drop 字段名;
==================刪除數據表====================
* drop table [if exists] 表名1[,表名2...];
10.數據操作(操作表記錄)???
* 新增數據
insert into tb_stu(username,password) values('zhangsan','123'),('lisi','123');
insert into tb_stu values('zhangsan','123'),('lisi','123');
* 查看數據
select * from tb_stu;
select username, password from tb_stu;
select * from tb_stu where username = 'zhangsan';
* 更新數據
update tb_stu set password = '456' where username = 'zhangsan';
* 刪除數據
delete from tb_stu [where ...];
11.中文數據問題(字符集問題)???
* show character set; 查看服務器識別哪些字符集
* 查看mysql數據庫編碼:show variables like 'char%';
* set names gbk; 相當與下面三句 ===>
SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results ='utf8';
* character_set_connection ;連接層字符集,是字符集轉變的中間者,如果統一了效率更高,不統一也沒問題
12.校對集???
* 校對集:數據比較的方式
* 校對集有三種格式:
_bin:binary二進制比較,取出二進制位,一位一位比較,區分大小寫
_cs:case sensitive 大小寫敏感
_ci:case insensitive 大小寫不敏感
* 查看所有校對集 show collation;
* 校對集應用:只有當數據產生比較的時候,校對集才會生效
對比:使用utf_bin和utf8_general_ci兩種不同校對集的效果
-- 創建表,使用不同的校對集
create table tb_collate_bin(
name varchar(20)
)charset utf8 collate utf8_bin;
create table tb_collate_ci(
name varchar(20)
)charset utf8 collate utf8_general_ci;
-- 插入數據
insert into tb_collate_bin values('a'),('A'),('B'),('b');
insert into tb_collate_ci values('a'),('A'),('B'),('b');
-- 排序查找
select * from tb_collate_bin order by name;? ABab 區分大小寫
select * from tb_collate_ci order by name;? aABb? 不區分大小寫
* 當表已經有數據了,那么校對集修改無效
---
總結
以上是生活随笔為你收集整理的mysql 修改库的校对集_mysql数据库的基本操作(增删改查、字符集、校对集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql集群从节点无法启动_一次gal
- 下一篇: redis 查询缓存_Redis缓存总结