mysql(一)

   数据库服务器→N多库→N张表→行与列

   多表成库,表存于库下,一个库下面可以有多个表。库存在于数据库服务器,一个服务器下面可以有多个库。

  1. 先建立数据库服务器
  2. 建立一个库
  3. 再建表 

   如何连接服务器?

   连接数据库所需要的工具:mysql作为数据库服务器来运行,任何满足其通信规范的软件都可以作为客户端来连接服务器,常用的客户端:mysql front navcat,基于web的phpMyAdmin,还有mysql自带的命令行客户端

  1. 服务器地址(可用IP,域名):端口(3306)
  2. 用户名
  3. 密码 

   命令如下:

mysql -h localhost -u username -p password

   注意:-h如果不写,则默认连接localhost。

   

   入门语句:

   1、查看当前服务器下面,有哪些库(database)?

show databases;

   2、创建一个数据库

create database DBName[字符集声明,整理声明];

   3、删除数据库

drop database test2;

   4、修改数据库(只能修改字符集和整理集,简单,先自己看)

   能否修改数据库的名字?

   答:不能

   5、选择数据库

   在进行表,行的相关操作时,要先选择数据库。

use DBName;(加不加分号都行)//选择相应数据库

   6、如何查看一下库下面的所有表。

show tables;

   7、如何删除一张表

drop table tableName;

   8、如何修改表名

rename table oldName to newName;

   9、查看表结构

desc tableName;

   10、最简单的建表语句

create table 表名 (
    列1名称 列1类型,
    列1名称 列1类型(最后一列后不要加',')
)

   这里先记住两种最常用列类型:int(整形),varchar(字符串)

   11、解决字符集问题。

   默认建立一般用utf8,而我们在windows下窗口是GBK,因此我们需要声明字符集。

set nams gbk;

   在DOS命令行中操作时,发现的1个小问题,语句打错以后,应该退出本语句,再继续打新语句,也可以打c退出本语句。

   

   所谓建表:就是声明列的过程。

   数据是以文件的形式放在硬盘上(也有放在内存里的)

   列:不同的列类型占的空间不一样,选列的原则:够用,又不浪费。

   建表语法:

create table 表名 (
    列1 [列属性 默认值],
    列2 [列属性 默认值],
    .....
    列n [列属性 默认值]
)
engine = 存储引擎 default charset = 字符集;

   详解列类型:

   一、数值型:

   1、整形→tinyint/smallint/mediumint/int/bigint

  从数学上来讨论tinyint

    ①占据空间

    ②存储范围

  tinyint是微小的列类型,占用1字节。tinyint默认是有符号的,存储-128~127。

  整形系列所占字节与存储范围的关系

  定性:占字节越多,存储范围越大。

  下图:是具体的数字分析:

      

   整形系统的可选参数:XXint(M) unsigned zerofill

   例:age tinyint(4) unsigned 或者 stunum smallint(6) zerofill。

   unsigned:代表此列为无符号类型,会影响到列的存储范围(范围从0开始),(不加unsigned,则代表该列默认是有符号类型,范围从负数开始)。

   列可以声明默认值,而且推荐声明默认值

not null default 0;
not null default '';

   zerofill:代表0填充,即:如果该数字不足参数M位(代表宽度,在zerofill时才有意义),则自动补0,补够M位。

  1. 如果没有zerofill属性,单独的参数M,没有任何意义。

  2. 如果设置某列为zerofill,则该列已经默认为unsigned,无符号类型。

   2、小数型:float(M,D),decimal(M,D)

   float(M,D):浮点小数,代表可存储一共M位(不含小数点),其中,小数点后D位。

   以(6,2)为例:-9999.99~9999.99;Float(4,2) unsigned ——> 0.00~99.99。

   decimal(M,D):定点小数,M,D的意义同上。

   小数型所占用字节:4个字节或8个字节。

   区别:decimal比float精度更高,适合存储货币等要求精确的数字。

   见下例:

   

   二、字符型

   char:定长类型。

   char(M),M代表宽度,(即:可容纳的字符数),0<=char字段长度(字节数)<=255之间。

   例:char(10),则能输入10个字符。

   varchar:变长类型。

   varchar(M),M代表宽度,(即:可容纳的字符数),0<=varchar字段长度(字节数)<=65535(以ASCII码字符为例,utf-8大概22000左右)。

类型 宽度 可存字符 实存字符(i<=M) 实占空间 利用率
char M M i M i/M<=100%
varchar M M i i个字符+(1-2个)字节(表示实存的字符数) i/(i+1-2)<100%

   char(M)如何占据M个字符宽度?

   答:如果实际存储内容不足M个,则后面加空格补齐。取出来的时候,再把后面的空格去掉。(所以如果内容最后有空格,将会被清除)。

   速度上:定长速度快些。

   char与varchar相关实验:

   

   text:文本类型,可以存较大的文本段,搜索速度稍慢。因此,如果不是特别大的内容,建议用char,varchar来代替。text不用加默认值(加了也没用)。

   char与varchar型的选择原则:

  1. 空间利用效率,四字成语表→char(4);个人简介,微博140字→varchar(140)。

  2. 速度,用户名:char。

   三、日期/时间型:

  1. year类型:1个字节,表示 1901-2155,[0000,表示错误时选择]。如果输入2位,‘00-69’表示2000-2069年,‘70-99’表示1970-1999年。如果记的麻烦,输入的时候,输入4位。
  2. date类型:典型格式:1992-08-12。日期类型:‘1000-01-01’->‘9999-12-31’。

  3. time类型:典型格式:hh:mm:ss。时间类型:‘-838:59:59’->‘838:59:59’。

  4. datetime类型:典型格式:‘1989-05-06 14:32:08’。日期时间类型范围:1000-01-01 00:00:00->9999-12-31 23:59:59。

   注意:在开发中,很少用日期时间类型来表示一个需要的精确到秒的列。原因:虽然日期时间类型能精确到秒,而且方便查看,但不易于计算机计算,所以用时间戳来表示。

   时间戳:用int来存储。是1970-01-01 00:00:00 到当前的秒数。一般存注册时间,商品发布时间等,并不是用datetime存储,而是用时间戳。因为datetime虽然直观,但计算不便,而用int型存储时间戳,方便计算,对于显示来说,也可以方便的格式化。

   建表练习:给班级的同学建个档案表,有如下信息:

姓名 年龄 Email 手机号 简介 毕业薪水 入学日期
             

   分析:

 #姓名:char(3)
 #年龄:tinyint unsigned
 #email:varchar(30)
 #tel:char(11)
 #intro:varchar(1000)
 #salary:decimal(7,2)
 #riqi:date

   代码:

 create table java123 (
    id int primary key auto_increment,
    name char(3) not null default '',
    age tinyint unsigned not null default 0,
    email varchar(30) not null default '',
    tel char(11) not null default '',
    salary decimal(7,2) not null default '1800.68',
    riqi date not null default '2012-03-13'
 );

   增删改查案例过程分析:

   用户注册:表单收集提交数据,注册页面收集到表单的数据后,形成insert语句,user表插入该条数据,用户注册完成。

   前台用户中心,用户新昵称,根据新昵称和用户id,形成update语句完成昵称修改。

   管理员后台点击会员列表,此时网页形成select语句,查询出所有会员的数据,完成会员的查看。

   管理员后台选中某用户并且删除,捕捉此用户的id,根据用户id形成相应的delete语句,执行delete语句,完成用户的删除。

   增删改查基本语法学习:

   增:insert

   insert 3

  1. 插入哪张表?

  2. 插入哪几列?

  3. 这几列分别插入什么值?

   基本语法:

insert into 表名          
(列1,列2,……,列n)            
Values                       
(值1,值2,…..,值n);

   值与列,按顺序,一一对应.

   特殊:insert语句,允不允许不写列名

   答:允许。

   如果没有声明列名,则默认插入所有列,因此,值应该与全部列,按顺序一一对应。语法如下:

insert into 表名                  
Values                       
(值1,值2,…..,值n);

   改:update语句。

   update  4问

  1. 改哪张表?

  2. 改哪几列的值?

  3. 分别改为什么值?

  4. 在哪些行生效?

   基本语法:

update 表名
set
列1=新值1,
列2=新值2,
列n=新值n....
where expr;

   删:delete语句。

   delete  2问

  1. 从哪张表删除数据?

  2. 要删除那些行?

   基本语法:

delete from 表名 
where expr;

   

原文地址:https://www.cnblogs.com/yerenyuan/p/5297759.html