MySql

数据库简单概念

数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理,检索和复制所保存数据。

其他类型的数据存储,可以使用,如获取文件系统上的文件或内存中的大的哈希表,但数据并写入不会那么快,但这些类型的系统易于使用。

所以今天,我们使用关系数据库管理系统(RDBMS)来存储和管理体积庞大的数据。这就是所谓关系数据库,因为所有的数据存储到不同的表和关系建立使用主键或外键等其它键。

一个关系数据库管理系统(RDBMS)是一种软件是:

能够实现具有表,列和索引的数据库

保证了各种表的行之间的引用完整性

自动更新索引

解释SQL查询和联合各表的信息。

简单的说数据库就是装数据、管理数据的地方,每个网站的资源(比如图像、声音、视屏、软件等)、每个游戏的资源,都是放在服务器里的数据库中的。

什么是 SQL?

SQL 指结构化查询语言
SQL 使我们有能力访问数据库
SQL 是一种 ANSI (美国国家标准化组织)的标准计算机语言

SQL 能做什么?

SQL 面向数据库执行查询
SQL 可从数据库取回数据
SQL 可在数据库中插入新的记录
SQL 可更新数据库中的数据
SQL 可从数据库删除记录
SQL 可创建新数据库
SQL 可在数据库中创建新表
SQL 可在数据库中创建存储过程
SQL 可在数据库中创建视图
SQL 可以设置表、存储过程和视图的权限

SQL 是一种标准 - 但是...
SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。
不幸地是,存在着很多不同版本的 SQL 语言,但是为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。
注释:除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的私有扩展!

MySql简单概念

MySQL 数据库
MySQL是一个快速,易于使用的RDBMS,被用于许多小型和大型企业。MySQL由一个瑞典公司MySQL AB支持。正在开发,销售。MySQL变得如此受欢迎,因为许多很好的理由:

  • MySQL在一个开源许可下发布。所以使用它不要担心什么问题。

  • MySQL本身是非常强大的程序。它拥有可处理最昂贵,最强大的数据库软件包的相当大一部分功能。

  • MySQL使用众所周知的SQL数据语言的标准形式。

  • MySQL可运行在许多类操作系统和许多语言,包括 C#, PHP, PERL, C, C++, JAVA ,Python等

  • MySQL运行得非常快,甚至在大型数据集也可以运行得很好。

  • MySQL支持大型数据库,可达5千万行以上的表。 表的默认文件大小限制为4GB,但可以增加(如果操作系统可以处理它),800万TB是一个理论极限(TB).

  • MySQL是定制的。开源GPL许可允许程序员修改MySQL软件,以适应自己的特定环境。

  • MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:

某班级学生信息

表头(header): 每一列的名称;
列(row): 具有相同数据类型的数据的集合;
行(col): 每一行用来描述某个人/物的具体信息;
值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
主键(key): 表中用来识别某个特定的人\物的方法, 主键的值在当前列中具有唯一性。
**外键: **外键是两个表之间的连接值。

MySQL服务 DOS下的启动、停止与卸载
在 Windows 命令提示符下运行:
启动: net start MySQL
停止: net stop MySQL
卸载: sc delete MySQL

MySql中的数据类型

  1. 整形
MySql数据类型 含义(有符号)
tinyint 1个字节 范围(-128~127)
smallint 2个字节 范围(-32768~32767)
mediumint 3个字节 范围(-8388608~8388607)
int 4个字节 范围(-2147483648~2147483647)
bigint 8个字节 范围(+-9.22*10的18次方)

2、浮点型(float和double)

MySQL数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d小数位

设一个字段定义为float(5,3),如果插入一个数12.45678,实际数据库里存的是12.457,但总个数还以实际为准,即5位。

3、定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

4、字符串(char,varchar,_text)

MySQL数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n)固定长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符

char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
3.char类型的字符串检索速度要比varchar类型的快。

varchar和text:
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
2.text类型不能有默认值。
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

5.二进制数据(_Blob)
1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不用指定字符集。

6.日期时间类型

MySQL数据类型 含义
date 日期 '2008-12-2'
time 时间 '12:25:36'
datetime 日期时间 '2008-12-2 22:06:44'
timestamp 自动存储记录修改时间

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

数据类型的属性

MySQL关键字 含义
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集

2. 使用数据库

1> 创建数据库

使用 create database 语句可完成对数据库的创建, 创建命令的格式如下:

create database 数据库名 [其他选项];

例如我们需要创建一个名为 samp_db 的数据库, 在命令行下执行以下命令:

create database Person_DB character;

注意: MySQL语句以分号(;)作为语句的结束, 若在语句结尾不添加分号时, 命令提示符会以 -> 提示你继续输入(有个别特例, 但加分号是一定不会错的);

3. 创建数据库表

使用 create table 语句可完成对表的创建, create table 的常见形式:

create table 表名称(列声明);

以创建 students 表为例, 表中将存放 学号(id)、姓名(name)、性别(sex)、年龄(age)、联系电话(tel) 这些内容:

create table students   
(       
          id int unsigned not null auto_increment primary key,      
          name char(8) not null,        
          gender char(4) not null,      
          age tinyint unsigned not null,        
          tel char(13) null default "-" 
);

对于一些较长的语句在命令提示符下可能容易输错, 因此我们可以通过任何文本编辑器将语句输入好后保存为 createtable.sql 的文件中, 通过命令提示符下的文件重定向执行执行该脚本。
打开命令提示符, 输入: mysql -D samp_db -u root -p < createtable.sql

(提示: 1.如果连接远程主机请加上 -h 指令; 2. createtable.sql 文件若不在当前工作目录下需指定文件的完整路径。)
语句解说:
create table tablename(columns) 为创建数据库表的命令, 列的名称以及该列的数据类型将在括号内完成;
括号内声明了5列内容, id、name、sex、age、tel为每列的名称, 后面跟的是数据类型描述, 列与列的描述之间用逗号(,)隔开;
以 "id int unsigned not null auto_increment primary key" 行进行介绍:

  • "id" 为列的名称;
  • "int" 指定该列的类型为 int(取值范围为 -8388608到8388607), 在后面我们又用 * * "unsigned" 加以修饰, 表示该类型为无符号型, 此时该列的取值范围为 0到16777215;
  • "not null" 说明该列的值不能为空, 必须要填, 如果不指定该属性, 默认可为空;
  • "auto_increment" 需在整数列中使用, 其作用是在插入数据时若该列为 NULL, MySQL将自动产生一个比现存值更大的唯一标识符值。在每张表中仅能有一个这样的值且所在列必须为索引列。
  • "primary key" 表示该列是表的主键, 本列的值必须唯一, MySQL将自动索引该列。

下面的 char(8) 表示存储的字符长度为8, tinyint的取值范围为 -127到128, default 属性指定当该列值为空时的默认值。

**提示: **1. 使用 show tables; 命令可查看已创建了表的名称; 2. 使用 describe 表名; 命令可查看已创建的表的详细信息。

操作MySQL数据库

** 1. 向表中插入数据**
insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:

insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);

其中 [] 内的内容是可选的, 例如, 要给 Person_DB 数据库中的 students 表插入一条记录, 执行语句:

insert into students values(NULL, "王刚", "男", 20, "13811371377");

按回车键确认后若提示 Query Ok, 1 row affected (0.05 sec) 表示数据插入成功。 若插入失败请检查是否已选择需要操作的数据库。
有时我们只需要插入部分数据, 或者不按照列的顺序进行插入, 可以使用这样的形式进行插入:

insert into students (name, sex, age) values("孙丽华", "女", 21);

** 2. 查询表中的数据**
select 语句常用来根据一定的查询规则到数据库中获取数据, 其基本的用法为:

select 列名称 from 表名称 [查询条件];

例如要查询 students 表中所有学生的名字和年龄, 输入语句

select name, age from students;

执行结果如下:

name age
王刚 20
孙丽华 21
王永恒 23
郑俊杰 19
陈芳 22
张伟朋 21

6 rows in set (0.00 sec) mysql>
也可以使用通配符 * 查询表中所有的内容, 语句:

select * from students;

2.1按特定条件查询:
where 关键词用于指定查询条件, 用法形式为:

 select 列名称 from 表名称 where 条件;

以查询所有性别为女的信息为例, 输入查询语句:

 select * from students where sex="女";

where 子句不仅仅支持 "where 列名 = 值" 这种名等于值的查询形式, 对一般的比较运算的运算符都是支持的, 例如 =、>、<、>=、<、!= 以及一些扩展运算符 is [not] null、in、like 等等。 还可以对查询条件使用 or 和 and 进行组合查询。
示例:
查询年龄在21岁以上的所有人信息:

select * from students where age > 21;

查询名字中带有 "王" 字的所有人信息:

select * from students where name like "%王%";

查询id小于5且年龄大于20的所有人信息:

select * from students where id<5 and age>20;

更新表中的数据
update 语句可用来修改表中的数据, 基本的使用形式为:

update 表名称 set 列名称=新值 where 更新条件;

使用示例:
将id为5的手机号改为默认的"-":

update students set tel=default where id=5;

将所有人的年龄增加1:

update students set age=age+1;

将手机号为 13288097888 的姓名改为 "张伟鹏", 年龄改为 19:

update students set name="张伟鹏", age=19 where tel="13288097888";

删除表中的数据
delete 语句用于删除表中的数据, 基本用法为:

delete from 表名称 where 删除条件;

使用示例:
删除id为2的行:

delete from students where id=2;

删除所有年龄小于21岁的数据:

delete from students where age<20;

**删除表中的所有数据: **

delete from students;

创建后表的修改
alter table 语句用于创建后对表的修改, 基础用法如下:
添加列
基本形式:

alter table 表名 add 列名 列数据类型 [after 插入位置];

示例:
在表的最后追加列 address:

alter table students add address char(60);

在名为 age 的列后插入列 birthday:

alter table students add birthday date after age;

修改列
基本形式:

 alter table 表名 change 列名称 列新名称 新数据类型;

示例:
将表 tel 列改名为 telphone:

alter table students change tel telphone char(13) default "-";

将 name 列的数据类型改为 char(16):

alter table students change name name char(16) not null;

删除列
基本形式: alter table 表名 drop 列名称;

示例:
删除 birthday 列:

alter table students drop birthday;

重命名表
基本形式:

alter table 表名 rename 新表名;

示例:
重命名 students 表为 workmates:

alter table students rename workmates;

删除整张表
基本形式:

drop table 表名;

示例:
删除 workmates 表:

drop table workmates;

** 删除整个数据库**
基本形式:

drop database 数据库名;

示例:
删除 samp_db 数据库:

drop database samp_db;

C# 操作数据库

先下载mysql针对 .net的命名空间 下载地址

下载完成之后,得到

mysql .net扩展包

v4.0和v4.5中,分别针对于.NetFramework的版本号。

这里我选用v4.0,在项目中添加引用:

添加引用
添加引用
选择引用的文件

导入命名空间:using MySql.Data.MySqlClient;

            // Host 数据库所在的ip地址 这里取本机的数据  , 数据库名称,就是我们将要操作的数据, UserName、Password就是登陆数据库的账号, 密码。
            string hostName = "Host=localhost;Database=bank;Username=root;Password=";

            // 1. 创建一个数据库连接对象
            MySqlConnection con = new MySqlConnection(hostName);
            // 打开该数据库的连接
            con.Open();


            #region mysql执行插入语句
            //2 . 创建出一个命令对象 。 通过该对象去执行sql语句 。
            // 第一个参数,将要执行的sql语句, 第二个参数,是在哪个连接上面执行。  该连接包含了数据库的名字,主机地址,还有登录的账户
            //MySqlCommand command = new MySqlCommand("insert into student (name, age, gender) values ('张三', 99, '女')", con);

            //if (command.ExecuteNonQuery() > 0)
            //{
            //    Console.WriteLine("插入数据成功");
            //}
            //else
            //{
            //    Console.WriteLine("插入数据失败");
            //}

            #endregion

            #region mysql执行查询语句

            MySqlCommand command = new MySqlCommand("select * from student", con);

            //  执行一个查询命令, 获取到的数据,存放在reader中。 
            MySqlDataReader reader =  command.ExecuteReader();

            // read方法, 如果获取到数据,就返回True,否则 false。 
            while (reader.Read())
            {
                Console.WriteLine("id :" +  reader["id"] + "  name : " + reader["name"] + "  age : " + reader["age"]);
            }



            #endregion

            // 数据库使用完毕要及时关闭 。   不然下次打开的时候会出异常
            con.Close();

            Console.WriteLine("程序执行完毕");
            Console.ReadKey();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容