一、存储值

eg:登录一个页面,在进入这个页面之前你怎么知道它登没登录呢?[在登录成功之后我们把状态保存起来]

存储值得方式有两种,一种是cookie,一种是session

1.1区别:

代码:

               if (SqlHelper.Exists(sSql, para))
{
//cookie保存状态
if (chkRPwd.Checked)
{
Response.Cookies["name"].Expires = DateTime.Now.AddMinutes();//设置过期时间
//删除cookie
//Response.Cookies.Clear();
}
Response.Cookies["name"].Value = username;
Response.Redirect("HomeAdoSqlHelper.aspx");
}
else
{
Response.Write("<script>alert('密码错误!');</script>");
}
}
                if (SqlHelper.Exists(sSql, para))
{
//把session保存安全系数高的东西,保存于浏览器缓存里
Session["name"] = username;
Response.Redirect("HomeAdoSqlHelper.aspx");
}
else
{
Response.Write("<script>alert('密码错误!');</script>");
}
}
        protected void Page_Load(object sender, EventArgs e)
{
//cookie获取状态
if (Request.Cookies["name"] == null)
{
Response.Redirect("loginSqlHelper.aspx");
}
if (!(IsPostBack))
{
BindUserInfor();
}
}
          protected void Page_Load(object sender, EventArgs e)
{
//session
if (Session["name"] == null)
{
Response.Redirect("loginSqlHelper.aspx");
}
if (!(IsPostBack))
{
BindUserInfor();
}
}

二、sqlHelper做增删改查,SQL注入处理[后台绑定下拉一定要对应]

     <form id="form1" runat="server">
<div>
<table>
<tr>
<td> 用户名:</td>
<td>
<asp:TextBox ID="txtSUserName" runat="server"></asp:TextBox>
</td>
<td>班级:</td>
<td>
<asp:DropDownList ID="ddlselPhase" runat="server">
<asp:ListItem>---请选择---</asp:ListItem>
<asp:ListItem>.NET高级班01期</asp:ListItem>
<asp:ListItem>.NET高级班02期</asp:ListItem>
<asp:ListItem>.NET讲师</asp:ListItem>
<asp:ListItem>.NET网站开发01期</asp:ListItem>
<asp:ListItem>.NET网站开发02期</asp:ListItem>
<asp:ListItem>.NET网站开发03期</asp:ListItem>
<asp:ListItem>.NET网站开发04期</asp:ListItem>
<asp:ListItem>.NET网站开发05期</asp:ListItem>
<asp:ListItem>.NET网站开发06期</asp:ListItem>
<asp:ListItem>.NET网站开发07期</asp:ListItem>
<asp:ListItem>.NET网站开发08期</asp:ListItem>
<asp:ListItem>.NET网站开发09期</asp:ListItem>
<asp:ListItem>.NET网站开发10期</asp:ListItem>
<asp:ListItem>.NET网站开发11期</asp:ListItem>
<asp:ListItem>.NET网站开发12期</asp:ListItem>
<asp:ListItem>.NET网站开发13期</asp:ListItem>
<asp:ListItem>.NET网站开发14期</asp:ListItem>
<asp:ListItem>.NET网站开发15期</asp:ListItem>
<asp:ListItem>.NET网站开发16期</asp:ListItem>
<asp:ListItem>java第一期</asp:ListItem>
<asp:ListItem>JAVA讲师</asp:ListItem>
<asp:ListItem>ps设计01期</asp:ListItem>
<asp:ListItem>ps设计02期</asp:ListItem>
<asp:ListItem>ps设计03期</asp:ListItem>
<asp:ListItem>网页前端01期</asp:ListItem>
</asp:DropDownList>
</td>
<td>
<asp:Button ID="btnSel" runat="server" Text="查询" OnClick="btnSel_Click" style="height: 21px" />
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td> 用户名:</td>
<td>
<asp:TextBox ID="txtAddUserName" runat="server"></asp:TextBox>
</td>
<td> 密码:</td>
<td>
<asp:TextBox ID="txtAddPwd" runat="server" TextMode="Password"></asp:TextBox>
</td>
<td> QQ:</td>
<td>
<asp:TextBox ID="txtAddQq" runat="server"></asp:TextBox>
</td>
<td>班级:</td>
<td>
<asp:DropDownList ID="ddlAddPhase" runat="server">
<asp:ListItem>---请选择---</asp:ListItem>
<asp:ListItem>.NET高级班01期</asp:ListItem>
<asp:ListItem>.NET高级班02期</asp:ListItem>
<asp:ListItem>.NET讲师</asp:ListItem>
<asp:ListItem>.NET网站开发01期</asp:ListItem>
<asp:ListItem>.NET网站开发02期</asp:ListItem>
<asp:ListItem>.NET网站开发03期</asp:ListItem>
<asp:ListItem>.NET网站开发04期</asp:ListItem>
<asp:ListItem>.NET网站开发05期</asp:ListItem>
<asp:ListItem>.NET网站开发06期</asp:ListItem>
<asp:ListItem>.NET网站开发07期</asp:ListItem>
<asp:ListItem>.NET网站开发08期</asp:ListItem>
<asp:ListItem>.NET网站开发09期</asp:ListItem>
<asp:ListItem>.NET网站开发10期</asp:ListItem>
<asp:ListItem>.NET网站开发11期</asp:ListItem>
<asp:ListItem>.NET网站开发12期</asp:ListItem>
<asp:ListItem>.NET网站开发13期</asp:ListItem>
<asp:ListItem>.NET网站开发14期</asp:ListItem>
<asp:ListItem>ps设计01期</asp:ListItem>
<asp:ListItem>ps设计03期</asp:ListItem>
<asp:ListItem>网页前端01期</asp:ListItem>
</asp:DropDownList>
</td>
<td>
<asp:Button ID="btnAdd" runat="server" Text="添加" OnClick="btnAdd_Click" />
</td>
</tr>
</table>
</div>
<div>
<table>
<tr>
<td>用户ID:</td>
<td>
<asp:TextBox ID="txtDUId" runat="server"></asp:TextBox>
</td>
<td>
<asp:Button ID="btnD" runat="server" Text="删除" OnClick="btnD_Click" />
</td>
</tr>
</table>
</div>
<%--<div>
<table>
<tr>
<td>ID:</td>
<td>
<asp:TextBox ID="txtUId" runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="txtUUserName" runat="server"></asp:TextBox>
</td>
<td>
<asp:Button ID="btnU" runat="server" Text="更新" OnClick="btnU_Click" />
</td>
</tr>
</table>
</div>--%>
<div>
<table>
<tr>
<td>ID:</td>
<td>
<asp:TextBox ID="txtUuid" runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="txtUuserName2" runat="server"></asp:TextBox>
</td>
<td>
<asp:Button ID="btnU2" runat="server" Text="更新" OnClick="btnU2_Click"/>
</td>
</tr>
</table>
</div>
<div class="dItem">
<table>
<tr>
<td>
<asp:Button ID="btnDelAll" runat="server" Text="批量删除" OnClick="btnDelAll_Click" OnClientClick="return confirm('你确定删除吗?');"/>
</td>
<td>
<asp:Button ID="btnUpAll" runat="server" Text="批量修改" OnClick="btnUpAll_Click" />
</td>
<td>
<asp:Button ID="btnAllAdd" runat="server" Text="添加" OnClick="btnAllAdd_Click"/>
</td>
</tr>
</table>
</div>
<div>
<asp:GridView ID="GriVShow" runat="server" AutoGenerateColumns="False" OnRowDataBound="GriVShow_RowDataBound">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkAll" runat="server" AutoPostBack="True" OnCheckedChanged="chkAll_CheckedChanged" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkItem" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Userid" HeaderText="ID" />
<asp:BoundField DataField="UserName" HeaderText="用户名:" />
<asp:BoundField DataField="phonenum" HeaderText="电话号码" />
<asp:BoundField DataField="qq" HeaderText="QQ" />
<asp:BoundField DataField="phase" HeaderText="班级" />
<asp:BoundField DataField="CreatedTime" HeaderText="创建时间" />
<asp:TemplateField HeaderText="用户名">
<ItemTemplate>
<asp:TextBox ID="txtgvUserName" runat="server" Text='<%#Eval("UserName")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="密码">
<ItemTemplate>
<asp:TextBox ID="txtgvPwd" runat="server" Text='<%#Eval("Pwd")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="QQ">
<ItemTemplate>
<asp:TextBox ID="txtgvQq" runat="server" Text='<%#Eval("QQ")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="班级">
<ItemTemplate>
<asp:DropDownList ID="ddlgvPhase" runat="server" ToolTip='<%#Eval("phase")%>'>
<asp:ListItem>---请选择---</asp:ListItem>
<asp:ListItem>.NET高级班01期</asp:ListItem>
<asp:ListItem>.NET高级班02期</asp:ListItem>
<asp:ListItem>.NET讲师</asp:ListItem>
<asp:ListItem>.NET网站开发01期</asp:ListItem>
<asp:ListItem>.NET网站开发02期</asp:ListItem>
<asp:ListItem>.NET网站开发03期</asp:ListItem>
<asp:ListItem>.NET网站开发04期</asp:ListItem>
<asp:ListItem>.NET网站开发05期</asp:ListItem>
<asp:ListItem>.NET网站开发06期</asp:ListItem>
<asp:ListItem>.NET网站开发07期</asp:ListItem>
<asp:ListItem>.NET网站开发08期</asp:ListItem>
<asp:ListItem>.NET网站开发09期</asp:ListItem>
<asp:ListItem>.NET网站开发10期</asp:ListItem>
<asp:ListItem>.NET网站开发11期</asp:ListItem>
<asp:ListItem>.NET网站开发12期</asp:ListItem>
<asp:ListItem>.NET网站开发13期</asp:ListItem>
<asp:ListItem>.NET网站开发14期</asp:ListItem>
<asp:ListItem>ps设计01期</asp:ListItem>
<asp:ListItem>ps设计03期</asp:ListItem>
<asp:ListItem>网页前端01期</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="详情">
<ItemTemplate>
<a href="UserInforManagerContext.aspx?Id=<%#Eval("UserId")%>">详情</a>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
 namespace sqlHelperStudy2160907
{
public partial class HomeAdoSqlHelperFirst : System.Web.UI.Page
{
SqlParameter[] para=new SqlParameter[];
protected void Page_Load(object sender, EventArgs e)
{
if (!(IsPostBack))
{
BindUserInfor();
}
}
public void BindUserInfor()
{
try
{
DataTable dt = SqlHelper.ExecuteDataSetText(GetSql(), para).Tables[];
GriVShow.DataSource = dt;
GriVShow.DataBind();
}
catch (Exception ex)
{
Response.Write("<script>alret('系统正在维护,请联系管理员!');</script>");
}
}
public string GetSql()
{
StringBuilder sb = new StringBuilder();
//sb.Append("select Userid,UserName,phonenum,sex,phase,qq,Message,HeadPic,CreatedTime from UserInfor where 1=1");
sb.Append("select top 100 * from UserInfor where 1=1 ");
if (!string.IsNullOrEmpty(txtSUserName.Text.Trim()))
{
//sb.Append(string.Format("and UserName='{0}'", txtSUserName.Text.Trim()));
sb.Append("and UserName=@UserName");
para[] = new SqlParameter("@UserName",txtSUserName.Text.Trim());
}
if (ddlselPhase.SelectedIndex > )
{
sb.Append("and phase=@phase");
para[] = new SqlParameter("@phase",ddlselPhase.SelectedValue);
//sb.Append(string.Format("and phase='{0}'", ddlselPhase.SelectedValue));
}
return sb.ToString();
} protected void btnSel_Click(object sender, EventArgs e)
{
BindUserInfor();
} protected void chkAll_CheckedChanged(object sender, EventArgs e)
{
//1.当我们点击按钮时,去找chkAll它的事件源的对象把它变成checkBox
CheckBox chkAll = sender as CheckBox;
//2.对它的每一行进行遍历循环
foreach (GridViewRow gvr in GriVShow.Rows)
{
//2.1获得到第一行的第一列,找到每一列id等于chkitem的对象把它变成checkbox
CheckBox chkItem = gvr.Cells[].FindControl("chkItem") as CheckBox;
//2.2让它当前全选的checked属性等于下面每一行的属性,选中就为true,没选就为Fulse
chkItem.Checked = chkAll.Checked;
}
}
protected void GriVShow_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlphase = e.Row.FindControl("ddlgvPhase") as DropDownList;
string phase = ddlphase.ToolTip;
if (!string.IsNullOrEmpty(phase))
{
ddlphase.ClearSelection();
ddlphase.Items.FindByValue(phase).Selected = true;
}
}
} protected void btnAdd_Click(object sender, EventArgs e)
{
string username = txtAddUserName.Text.Trim();
string pwd = txtAddPwd.Text.Trim();
string qq = txtAddQq.Text.Trim();
string phase = ddlAddPhase.SelectedIndex > ? ddlAddPhase.SelectedValue : "";
if (!string.IsNullOrEmpty(username))
{
string sSql = string.Format("insert into UserInfor(UserName,Pwd,QQ,Phase)values(@UserName,@Pwd,@QQ,@Phase)");
SqlParameter[] paraA = new SqlParameter[]
{
new SqlParameter("@UserName",username),
new SqlParameter("@Pwd",pwd),
new SqlParameter("@QQ",qq),
new SqlParameter("@Phase",phase)
};
SqlHelper.ExecteNonQueryText(sSql, paraA);
BindUserInfor();
}
}
public void Del(int UserId)
{
try
{
//string ssql = string.Format("select UserId from UserInfor where UserId='{0}'", UserId);
string ssql = "select UserId from UserInfor where UserId=@UserId";
SqlParameter[] paraD = new SqlParameter[] { new SqlParameter("@UserId", UserId) };
if(SqlHelper.Exists(ssql,paraD))
{
string sSql1 = string.Format("delete UserInfor where UserId=@UserId");
if(SqlHelper.ExecteNonQueryText(sSql1,paraD)>)
{
Response.Write("<script>alert('删除成功!');</script>");
}
BindUserInfor();
}
else
{
Response.Write("该用户不存在!");
}
}
catch (Exception ex)
{
Response.Write("<script>alret('系统正在维护,请联系管理员!');</script>");
}
}
protected void btnD_Click(object sender, EventArgs e)
{
int UserId = txtDUId.Text.Trim() == "" ? : Convert.ToInt32(txtDUId.Text.Trim());
Del(UserId);
BindUserInfor();
} protected void btnU2_Click(object sender, EventArgs e)
{
int Uid2 = txtUuid.Text.Trim() == "" ? : Convert.ToInt32(txtUuid.Text.Trim());
string uusername2 = txtUuserName2.Text.Trim();
try
{
string sSql = string.Format("select count(*) from UserInfor where UserId=@UserId");
SqlParameter[] paraU = new SqlParameter[] { new SqlParameter("@UserId", Uid2) };
int icount = Convert.ToInt32(SqlHelper.ExecuteScalar(CommandType.Text,sSql,paraU));
if (icount > )
{
string sSql1 = string.Format("update UserInfor set UserName=@UserName where UserId=@UserId");
//string ssql1 = "update UserInfor set UserName=@UserName where UserId=@UserId";
SqlParameter[] paraU1 = new SqlParameter[]
{
new SqlParameter("@UserName",uusername2),
new SqlParameter("@UserId",Uid2)
};
if (SqlHelper.ExecteNonQueryText(sSql1,paraU1)>)
{
Response.Write("<script>alert('数据更新成功!');</script>");
}
BindUserInfor();
}
else
{
Response.Write("该用户不存在!");
}
}
catch (Exception ex)
{
Response.Write("<script>alret('系统正在维护,请联系管理员!');</script>");
}
} protected void btnDelAll_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvr in GriVShow.Rows)
{
int UserId = Convert.ToInt32(gvr.Cells[].Text);
CheckBox chkItem = gvr.Cells[].FindControl("chkItem") as CheckBox;
if (chkItem.Checked)
{
Del(UserId);
}
}
BindUserInfor();
} public void UpUser(int UserId, string UserName, string Pwd, string qq, string phase)
{
try
{
string sSql = string.Format("update UserInfor set UserName=@UserName,Pwd=@Pwd,QQ=@QQ,Phase=@Phase where UserId=@UserId");
SqlParameter[] paraAll = new SqlParameter[]
{
new SqlParameter("@UserName",UserName),
new SqlParameter("@Pwd",Pwd),
new SqlParameter("@qq",qq),
new SqlParameter("@Phase",phase),
new SqlParameter("@UserId",UserId)
};
if (SqlHelper.ExecteNonQueryText(sSql, paraAll) > )
{
Response.Write("<script>alert('数据更新成功!');</script>");
}
}
catch (Exception)
{
Response.Write("网页正在维护!");
}
}
protected void btnUpAll_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvr in GriVShow.Rows)
{
int UserId = Convert.ToInt32(gvr.Cells[].Text);
CheckBox chkItem = gvr.Cells[].FindControl("chkItem") as CheckBox;
if (chkItem.Checked)
{
TextBox txtUserName = gvr.Cells[].FindControl("txtgvUserName") as TextBox;
TextBox txtPwd = gvr.Cells[].FindControl("txtgvPwd") as TextBox;
TextBox txtqq = gvr.Cells[].FindControl("txtgvQq") as TextBox;
DropDownList ddlphase = gvr.Cells[].FindControl("ddlgvPhase") as DropDownList;
UpUser(UserId, txtUserName.Text.Trim(),txtPwd.Text.Trim(), txtqq.Text.Trim(), ddlphase.SelectedValue);
}
}
BindUserInfor();
} protected void btnAllAdd_Click(object sender, EventArgs e)
{
try
{
string sSql = string.Format("insert into UserInfor (Phase,CreatedTime) values(@Phase,@CreatedTime)");
SqlParameter[] paraAdd = new SqlParameter[]
{
new SqlParameter("@Phase","网页前端01期"),
new SqlParameter("@CreatedTime",DateTime.Now.ToString())
};
SqlHelper.ExecteNonQueryText(sSql, paraAdd);
BindUserInfor();
}
catch (Exception)
{
Response.Write("网页正在维护!");
}
}
}
}

三、post传值:

postProject.aspx

     <form id="form1" action="PostProjectT.aspx" method="post">
<table>
<tr>
<td><input type="text" name="UserName"/></td>
</tr>
<tr>
<td><input type="password" name="Pwd"/></td></tr>
<tr>
<td><input type="submit"value="提交"/></td>
</tr>
</table>
</form>

PostProjectT.aspx.cs

         protected void Page_Load(object sender, EventArgs e)
{
//获取到用户名和密码
string username = Request.Form["UserName"].ToString();
string pwd = Request.Form["Pwd"].ToString();
//把用户名和密码返回回去
Response.Write(username+"-"+pwd);
}

sqlHelper做增删改查,SQL注入处理,存储值,cookie,session的更多相关文章

  1. sqlHelper做增删改查

    1.把数据库里面的数据显示出来 sqlHelper怎么用:[网上可以下载,需要可以找楼主要] 1.拷贝到项目,修改它的命名空间等于当前项目名称 2.数据库的连接信息,用户名,密码,登录方式等 < ...

  2. MVC学习-用EF做增删改查

    在做增删改查先,先介绍几个知识点: 1.代理类 在将对象方法EF数据上下文时,EF会为该对象封装 一个代理类对象, 同时为该对象的每一个属性添加一个标志:unchanged, 当对该对象某个属性进行操 ...

  3. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  4. sqlHelper的增删改查

    当一件事情被反复做了多次后.会想找一种办法来取代自己去做这个反复的动作. 敲代码也一样. 在程序中.对于反复的部分.假设是全然同样,那我们就会想着将其写成一个方法(过程.函数),放在一个具有权限的需求 ...

  5. 关于MVC工厂模式的增删改查sql存储过程

    这里MVC中用到了反射,工厂,泛型,接口 在搭建框架的时候,除了MVC的三层以外,还有泛型的接口层和工厂层 下面是dal层调用sql存储过程,增删改查,dal层继承了接口层,实现了接口层里面的方法 1 ...

  6. 基于django做增删改查组件,分页器组件

    增删改查组件 一.Djangoadmin的启发 二.基于Djangoadmin实现数据的增删改查 分页器组件 分页器组件的介绍以及源码解读 补充:源码下载,

  7. MySQL数据库增删改查SQL语句(2018整理集合大全)

    查看数据库 show databases;  使用数据库 use 数据库名; 创建数据库 CREATE DATABASE 数据库名; 删除数据库 DROP DATABASE 数据库名; 创建表 cre ...

  8. 手把手教你用nodejs+SQL Server2012做增删改查

    1.开发工具WebStorm 10.0.4 2.打开WebStorm 10.0.4新建项目:

  9. 转载-增删改查sql语句语法

    一.增:有2种方法 1.使用insert插入单行数据: 语法:insert [into] <表名> [列名] values <列值> 例:insert into Strdent ...

随机推荐

  1. ASP.NET MVC 路由(四)

    ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...

  2. Objective-C中的Strong、Copy与MutableCopy

    面试过程中经常被问到ARC中Strong.Copy的区别是什么.普通的回答是:一样.文艺(正确)的回答是:分情况(我擦!WQY#$&Y**%OWEUR) 可以先参考这篇文章http://www ...

  3. jQuery编程的最佳实践

    好像是feedly订阅里看到的文章,读完后觉得非常不错,译之备用,多看受益. 加载jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用CDN ...

  4. [ASP.NET MVC 大牛之路]03 - C#高级知识点概要(2) - 线程和并发

    本人博客已转移至:http://www.exblr.com/liam  我也想过跳过C#高级知识点概要直接讲MVC,但经过前思后想,还是觉得有必要讲的.我希望通过自己的经验给大家一些指引,带着大家一起 ...

  5. Npm install failed with “cannot run in wd”

    Linux环境下,root账户,安装某些npm包的时候报下面的错误,例如安装grunt-contrib-imagemin时: Error: EACCES, mkdir '/usr/local/lib/ ...

  6. Java Collections.sort方法对list集合排序

    1.排序测试类 package com.ljq.test; import java.util.ArrayList; import java.util.Collections; import java. ...

  7. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  8. Laravel5.0学习--03 Artisan命令

    本文以laravel5.0.22为例. 简介 Artisan 是 Laravel 内置的命令行接口.它提供了一些有用的命令协助您开发,它是由强大的 Symfony Console 组件所驱动.利用它, ...

  9. Execute SQL Task 参数和变量的映射

    Execute SQL Task能够执行带参数的SQL查询语句或存储过程(SP),通过SSIS的变量(Variable)对参数赋值.对于不同的Connection Manager,在Task中需要使用 ...

  10. Constraint2:constraint

    一,Constraint 是表定义的一部分,用于实现数据完整性. Data Integrity 由三种类型的constraint实现: Entity Integrity:数据是唯一的.约束: prim ...